- 论坛徽章:
- 0
|
老朋友, 如果对CSP和eybuild仍不理解, 请先到 29 楼看完示例后再发表意见, 谢谢支持.
可以将 C 语言直接插入到 HTML中来编写 CGI 程序叫 CSP (类似 ASP/JSP/PHP啦)
用 CSP 大大降低了直接用 C 写 CGI 程序的难度, 并且源程序非常直观.
下面是一个简单的留言板 CSP 源程序, 包括包括两个 CSP 文件, 两个 C 文件, 可以稍作修改以实现更复杂的应用(如连接SQL 数据库来实现多用户同时访问的数据存储等):
![]()
这里下载源代码: http://www.eybuild.com/develop/download/review.rar
看看 eybuild 的中文手册: http://www.eybuild.com/develop/doc/manual/eyBuild_manual_ch.pdf
这里下载 CSP 开发环境: http://www.eybuild.com/develop
============= review.csp =============
- <HTML><HEAD><TITLE>留言本</TITLE>
- <META http-equiv=Content-Type content="text/html; charset=gb2312">
- <STYLE>P {
- size: 6pt
- }
- .title {
- COLOR: #ffb6c1
- }
- </STYLE>
- <META content="MSHTML 6.00.2900.2180" name=GENERATOR></HEAD>
- <BODY>
- <P><SPAN class=title>
- <CENTER>
- <H1>留 言 本</H1></CENTER></SPAN>
- <P></P>
- <CENTER>
- <TABLE style="FONT-SIZE: 9pt" cellSpacing=0 borderColorDark=#ffffff
- cellPadding=0 width=650 borderColorLight=#c0c0c0 border=1>
- <TBODY>
- <%
- @include "../usr/db.h"
- {
- RECORD record;
- void * fp;
- fp = open_db("rb+");
-
- while(1)
- {
- if (db_read_next(fp, &record) <= 0)
- break;
- %>
- <TR bgColor=#dadada height=20>
- <TD>作者: <% = (record.name) %> </TD>
- <TD>性别: <% = (record.sex) %> </TD>
- <TD>邮件: <% = (record.mail) %> </TD>
- <TD>时间: <% =(record.now) %></TD></TR>
- <TR height=50>
- <TD colSpan=4><xmp><% = (record.msg) %></xmp></TD></TR>
- <%
- } /* for */
-
- close_db(fp);
- }
- %>
- </TBODY></TABLE></CENTER>
- <FORM action=<% =cgiPrefix(NULL) %>/store.csp method=post>
- <CENTER>
- <P>姓名: <INPUT name=name>
- <P>性别: <INPUT type=radio value=0 name=sex>女性
- <INPUT type=radio value=1 name=sex>男性
- <P>EMail:<INPUT name=email type=?Text?>
- <P>我要留言:</P><TEXTAREA name=content rows=10 cols=95></TEXTAREA>
- <P><INPUT type=submit value="发 表">
-
- <INPUT type=reset value=清除重写></P>
- </CENTER>
- </FORM>
- </BODY></HTML>
复制代码
============= store.csp =============
- <html>
- <head>
- <meta http-equiv="refresh" content="1; url=<% =cgiPrefix(NULL) %>/review.csp">
- <title>正在跳转...</title>
- </head>
- <body>
- <%
- @include "../usr/db.h"
- @include <time.h>
- {
- RECORD record;
- void * fp;
- time_t t;
- memset(&record, 0, sizeof(record));
- if ( '\0' == (strncpy(record.name, getParameter("name"), sizeof(record.name)-1))[0] ||
- '\0' == (strncpy(record.sex, getParameter("sex"), sizeof(record.sex)-1))[0] ||
- '\0' == (strncpy(record.mail, getParameter("email"), sizeof(record.mail)-1))[0] ||
- '\0' == (strncpy(record.msg, getParameter("content"), sizeof(record.msg)-1))[0] )
- {
- ebprintf(ebfp, "'名称/性别/Email/内容' 均不能包为空");
- }
- else
- {
- /* get time */
- t = time(NULL);
- strftime(record.now, sizeof(record.now)-1,
- "%Y-%m-%d %H:%M:%S", localtime(&t));
- /* convert sex */
- if (!strcmp("0", record.sex))
- strcpy(record.sex, "女");
- else
- strcpy(record.sex, "男");
-
- fp = open_db("ab+");
- db_insert(fp, &record);
- close_db(fp);
-
- ebprintf(ebfp, "留言成功,正在跳转...");
- }
- }
- %>
- </body>
- </html>
复制代码
============= db.h =============
- #ifndef _INC_DB_H_
- #define _INC_DB_H_
- #define DB_NAME "msg.db"
- typedef struct {
- char name[16];
- char sex[16];
- char mail[16];
- char now[24];
- size_t msg_len;
- char msg[512];
- } RECORD;
- extern void * open_db(char * mode);
- extern int close_db(void * fp);
- extern int db_read_next(void * fp, RECORD * rcd);
- extern int db_insert(void * fp, RECORD * rcd);
- #endif /* _INC_DB_H_ */
复制代码
============= db.h =============
- #include <stdio.h>
- #include <string.h>
- #include "db.h"
- /*
- open data base
- */
- void * open_db(char * mode)
- {
- FILE * fp;
-
- fp = fopen(DB_NAME, mode);
-
- return fp;
- }
- /*
- close data base
- */
- int close_db(void * fp)
- {
- if (NULL != fp)
- fclose(fp);
-
- return 0;
- }
- /*
- read record from base
- */
- int db_read_next(void * fp, RECORD * rcd)
- {
- size_t len;
-
- if (NULL == fp)
- return -1;
-
- if (feof((FILE*)fp))
- return 0;
-
- memset(rcd, 0, sizeof(RECORD));
-
- /* read header */
- len = sizeof(RECORD) - sizeof(rcd->msg);
- if (len != (int)fread(rcd, 1, len, fp))
- return -1;
-
- /* read message body */
- if (rcd->msg_len != fread(rcd->msg, 1, rcd->msg_len, (FILE*)fp))
- return -1;
-
- return sizeof(RECORD);
- }
- /*
- insert record to data base
- */
- int db_insert(void * fp, RECORD * rcd)
- {
- size_t len;
-
- if (NULL == fp || fseek(fp, 0, SEEK_END))
- return -1;
-
- /* write header */
- rcd->msg_len = strlen(rcd->msg);
- len = sizeof(RECORD) - sizeof(rcd->msg);
-
- if (len != fwrite(rcd, 1, len, (FILE*)fp))
- return -1;
-
- /* write message body */
- if (rcd->msg_len != (fwrite(rcd->msg, 1, rcd->msg_len, (FILE*)fp)))
- return -1;
-
- return sizeof(RECORD);
- }
复制代码
[ 本帖最后由 newzy 于 2006-3-20 18:11 编辑 ] |
|