cgic程序的编写

今天使用cgic库编写了一些cgi的代码,结果在编译的时候出了很多错误,在这里分享出来算是给自己做个笔记,虽然都是小问题但是急需解决的时候还是很麻烦的.

代码结构:

login_check.h文件声明

login_check.c定义

login.c使用login_check.h文件声明的函数

代码如下:简单描述一下,login.c中调用login_check.c实现的函数,其他就不要深究了.

/************************************************

* 文件名称: login_check.h

* 文件描述:

* 文件作者:by Wang.J,in 2013.11.14

* 文件版本:

* 修改记录:

*************************************************/

#include <sqlite3.h>

#include <stdio.h>

#include <stdlib.h>

sqlite3 * open_db(const char *path);

void close_db(sqlite3 *db);

int login_check(const char *path, const char *usr, const char *pwd);
/************************************************

* 文件名称: login_check.c

* 文件描述:

* 文件作者:by Wang.J,in 2013.11.14

* 文件版本:

* 修改记录:

*************************************************/

#include “login_check.h”

/*==================================================

* 函数名称:

* 函数功能:

* 函数参数:

* 返 回 值:

* 创 建 人:

* 修改记录:

===================================================*/

sqlite3 * open_db(const char *path)

{

……………………

}

/*==================================================

* 函数名称:

* 函数功能:

* 函数参数:

* 返 回 值:

* 创 建 人:

* 修改记录:

===================================================*/

void close_db(sqlite3 *db)

{

……………………………..

}

/*==================================================

* 函数名称:

* 函数功能:

* 函数参数:

* 返 回 值:

* 创 建 人:

* 修改记录:

===================================================*/

int login_check(const char *path, const char *usr, const char *pwd)

{

………………………………..

}
/************************************************

* 文件名称: login.c

* 文件描述:

* 文件作者:by Wang.J,in 2013.11.14

* 文件版本:

* 修改记录:

*************************************************/

#include “login_check.h”

…………………………………………………….

/*==================================================

* 函数名称:

* 函数功能:

* 函数参数:

* 返 回 值:

* 创 建 人:

* 修改记录:

===================================================*/

int Search_DataBase(char *username, char *password)

{

return login_check(SQLITE_OPEN, username, password);

}

…………………………………………………………….

没什么问题,开始编译

第一个问题:找不到login_check中声明实现的login_check函数.

这个是由于编写的Makefile文件中login.c在login_check.c前面的原因,调整一下顺序可以解决.

第二个问题:缺少cgiMain:看过cgic库的各位明白cgic库在cgic文件中定义了main,然后分别调用各个文件中的cgiMain函数,所以问题也就简单了,加上一个空的cgiMain函数即可,

int cgiMain()

{

return 0;

}

第三个问题:login.c文件中Search_DataBase函数找不到login_check函数,太丧心病狂了,怎么可能?然后我又仔细看了一下cgic的实现,发现使用cgic库之后,每个文件变得相互独立没有联系了,所以找不到其他文件中定义的函数.所以我最后的解决办法是:将函数的定义与实现全部写入到.h文件,在其他需要使用的文件中直接include这个.h文件.修改后如下:

/************************************************

* 文件名称: login_check.h

* 文件描述:

* 文件作者:by Wang.J,in 2013.11.14

* 文件版本:

* 修改记录:

*************************************************/

#include <sqlite3.h>

#include <stdio.h>

#include <stdlib.h>

sqlite3 * open_db(const char *path)

{

……….实现………………………

}

void close_db(sqlite3 *db)

{

…………………实现…………………………

}

int login_check(const char *path, const char *usr, const char *pwd)

{

…………………….实现……………………………………

}

login.c文件内容不变.

这是我解决这个问题的方法,如果其他大侠有什么更好的解决办法,欢迎指点.谢谢!

cgic程序的编写遇到的问题的更多相关文章

  1. C++程序的编写和实现

    C++程序的编写和实现 一个程序从编写到最后得到运行结果要经历以下一些步骤. 1. 用C++语言编写程序 用高级语言编写的程序称为“源程序”(source program).C++的源程序是以.cpp ...

  2. 将Python代码嵌入C++程序进行编写

    将Python代码嵌入C++程序进行编写的实例,python嵌入 把python嵌入的C++里面需要做一些步骤 安装python程序,这样才能使用python的头文件和库 在我们写的源文件中增加“Py ...

  3. 初识Java程序,编写简单代码?

    Dear All: 初识Java程序,编写简单代码? 首先小编在这里说下我们今天编写Java程序使用的是 eclipse 开发工具! 1.下载eclipse 官网地址:http://www.eclip ...

  4. 第2章 PLC1200 与HMI (TP900) 组合仿真连接 编写1200程序,编写HMI 仿真过程拍摄视频

    博途V13 与 WINCC PROFESSIONAL V13 创建一个PLC工程 和屏幕的 练习. 在做S1200与 HMI的仿真之前 需要设置控制面板 设置PG/PC口 巡视窗口用于看设备的一些属性 ...

  5. Python的安装与小程序的编写

    Python的安装 在此之前,我完全不了解Python,为了完成任务,在慌忙之中了解了一下Python,通过百度,一步步安装好Python 过程 1.从官网中找到下载菜单并下载最新版本 2.双击pyt ...

  6. Python基础:五、Python程序的编写方式

    python程序有两种编写方式: 1. 进入cmd控制台(linux终端),输入python进入编辑模式,这时候我们可以直接编写python程序 2. 也可以在.py文件中编写python代码,通过p ...

  7. Python程序的编写方式

    直接在Python的交互式环境编写代码 现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了. 在写代码之前,请千万不要用“复制”-“粘贴”把代码从页面粘贴到你 ...

  8. 单文件夹下的C程序如何编写Makefile文件

    通过学习已经学会了GCC的一些基础的命令,以及如何将C语言源代码编译成可执行文件. 我们已经知道在linux环境下编译源码时,常会有以下三个步骤: ./configure make make clea ...

  9. 基于Select模型通信程序的编写,编译和执行

    任务目标 编写Win32程序模拟实现基于Select模型的两台计算机之间的通信,要求编程实现服务器端与客户端之间双向数据传递.客户端向服务器端发送"计算从1到100的奇数和",服务 ...

随机推荐

  1. JVM内存模型和垃圾回收

    Java开发有个很基础的问题,虽然我们平时接触的不多,但是了解它却成为Java开发的必备基础——这就是JVM.在C++中我们需要手动申请内存然后释放内存,否则就会出现对象已经不再使用内存却仍被占用的情 ...

  2. [译]用R语言做挖掘数据《二》

    数据探索 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: ...

  3. 非常不错的js 屏蔽类加验证类

    1 >屏蔽功能类 1.1 屏蔽键盘所有键 <script language="javascript"><!--function document.onkey ...

  4. Form身份验证

    Forms身份验证Web.config<system.web><authentication mode="Forms">            <fo ...

  5. MUI框架 picker日期选择器实例

    MUI官方文档点我 (一)准备工作,下载相关的js.cs文件,地址 (二)新建普通html页面 1)引入相关js.cs文件 2) 一个input,记录下id: <form> <lab ...

  6. fieldset、legend、display html元素

    fieldset 定义和用法 fieldset 元素可将表单内的相关元素分组. <fieldset> 标签将表单内容的一部分打包,生成一组相关表单的字段. 当一组表单元素放到 <fi ...

  7. java自学-编程入门

    java语言写的代码需要先编译为可执行文件,才能被jvm执行.在下载的jdk安装目录下的bin目录,有两个可执行程序java.exe和javac.exe,javac就是用来编译的,java是执行编译后 ...

  8. UML 简介笔记

    1. UML 是什么? UML 统一建模语言是一组图形表示法,可以帮助描述和设计软件系统,特别是使用面向对象 OO 风格建造的软件系统. 2. 使用 UML 的方式 UML 有 3 种使用模式:草稿, ...

  9. 中南月赛 1313: ZZY的宠物

    1313: ZZY的宠物 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 114  Solved: 59[Submit][Status][Web Boar ...

  10. Oracle数据库RowId

    RowId是什么? RowId是根据每一行数据的物理信息地址编码而成的一个位列,利用RowId可以快速定位到某一行. Oracle数据库编辑数据必须查出RowId,可以根据如下语句查询: select ...