1、头文件

#include <fcgi_stdio.h>

2、while(FCGI_Accept()>=0)//这里进入循环,前台每请求一次fcgi服务,就循环一次

循环内处理:

char *query_string=getenv("QUERY_STRING");

3、从获得的query_string解析查询字段,进行兴许操作。

4、用printf返回处理结果给webserver,再由webserver将结果返回给client。

(这里的printf函数是在fcgi_stdio.h中又一次定义了的)

附:fcgi_stdio.h

/*

 * fcgi_stdio.h --

 *

 *      FastCGI-stdio compatibility package

 *

 *

 * Copyright (c) 1996 Open Market, Inc.

 *

 * See the file "LICENSE.TERMS" for information on usage and redistribution

 * of this file, and for a DISCLAIMER OF ALL WARRANTIES.

 *

 * $Id: fcgi_stdio.h,v 1.5 2001/06/22 13:21:15 robs Exp $

 */

#ifndef _FCGI_STDIO

#define _FCGI_STDIO 1

#include <stdio.h>

#include <sys/types.h>

#include "fcgiapp.h"

#if defined (c_plusplus) || defined (__cplusplus)

extern "C" {

#endif

#ifndef DLLAPI

#ifdef _WIN32

#define DLLAPI __declspec(dllimport)

#else

#define DLLAPI

#endif

#endif

/*

 * Wrapper type for FILE

 */

typedef struct {

    FILE *stdio_stream;

    FCGX_Stream *fcgx_stream;

} FCGI_FILE;

/*

 * The four new functions and two new macros

 */

DLLAPI int FCGI_Accept(void);

DLLAPI void FCGI_Finish(void);

DLLAPI int FCGI_StartFilterData(void);

DLLAPI void FCGI_SetExitStatus(int status);

#define FCGI_ToFILE(fcgi_file) (fcgi_file->stdio_stream)

#define FCGI_ToFcgiStream(fcgi_file) (fcgi_file->fcgx_stream)

/*

 * Wrapper stdin, stdout, and stderr variables, set up by FCGI_Accept()

 */

DLLAPI extern   FCGI_FILE       _fcgi_sF[];

#define FCGI_stdin      (&_fcgi_sF[0])

#define FCGI_stdout     (&_fcgi_sF[1])

#define FCGI_stderr     (&_fcgi_sF[2])

/*

 * Wrapper function prototypes, grouped according to sections

 * of Harbison & Steele, "C: A Reference Manual," fourth edition,

 * Prentice-Hall, 1995.

 */

DLLAPI void FCGI_perror(const char *str);

DLLAPI FCGI_FILE *FCGI_fopen(const char *path, const char *mode);

DLLAPI int        FCGI_fclose(FCGI_FILE *fp);

DLLAPI int        FCGI_fflush(FCGI_FILE *fp);

DLLAPI FCGI_FILE *FCGI_freopen(const char *path, const char *mode, FCGI_FILE *fp);

DLLAPI int        FCGI_setvbuf(FCGI_FILE *fp, char *buf, int bufmode, size_t size);

DLLAPI void       FCGI_setbuf(FCGI_FILE *fp, char *buf);

DLLAPI int        FCGI_fseek(FCGI_FILE *fp, long offset, int whence);

DLLAPI int        FCGI_ftell(FCGI_FILE *fp);

DLLAPI void       FCGI_rewind(FCGI_FILE *fp);

#ifdef HAVE_FPOS

DLLAPI int        FCGI_fgetpos(FCGI_FILE *fp, fpos_t *pos);

DLLAPI int        FCGI_fsetpos(FCGI_FILE *fp, const fpos_t *pos);

#endif

DLLAPI int        FCGI_fgetc(FCGI_FILE *fp);

DLLAPI int        FCGI_getchar(void);

DLLAPI int        FCGI_ungetc(int c, FCGI_FILE *fp);

DLLAPI char      *FCGI_fgets(char *str, int size, FCGI_FILE *fp);

DLLAPI char      *FCGI_gets(char *str);

/*

 * Not yet implemented

 *

 * int        FCGI_fscanf(FCGI_FILE *fp, const char *format, ...);

 * int        FCGI_scanf(const char *format, ...);

 *

 */

DLLAPI int        FCGI_fputc(int c, FCGI_FILE *fp);

DLLAPI int        FCGI_putchar(int c);

DLLAPI int        FCGI_fputs(const char *str, FCGI_FILE *fp);

DLLAPI int        FCGI_puts(const char *str);

DLLAPI int        FCGI_fprintf(FCGI_FILE *fp, const char *format, ...);

DLLAPI int        FCGI_printf(const char *format, ...);

DLLAPI int        FCGI_vfprintf(FCGI_FILE *fp, const char *format, va_list ap);

DLLAPI int        FCGI_vprintf(const char *format, va_list ap);

DLLAPI size_t     FCGI_fread(void *ptr, size_t size, size_t nmemb, FCGI_FILE *fp);

DLLAPI size_t     FCGI_fwrite(void *ptr, size_t size, size_t nmemb, FCGI_FILE *fp);

DLLAPI int        FCGI_feof(FCGI_FILE *fp);

DLLAPI int        FCGI_ferror(FCGI_FILE *fp);

DLLAPI void       FCGI_clearerr(FCGI_FILE *fp);

DLLAPI FCGI_FILE *FCGI_tmpfile(void);

DLLAPI int        FCGI_fileno(FCGI_FILE *fp);

DLLAPI FCGI_FILE *FCGI_fdopen(int fd, const char *mode);

DLLAPI FCGI_FILE *FCGI_popen(const char *cmd, const char *type);

DLLAPI int        FCGI_pclose(FCGI_FILE *);

/*

 * The remaining definitions are for application programs,

 * not for fcgi_stdio.c

 */

#ifndef NO_FCGI_DEFINES

/*

 * Replace standard types, variables, and functions with FastCGI wrappers.

 * Use undef in case a macro is already defined.

 */

#undef  FILE

#define FILE     FCGI_FILE

#undef  stdin

#define stdin    FCGI_stdin

#undef  stdout

#define stdout   FCGI_stdout

#undef  stderr

#define stderr   FCGI_stderr

#undef  perror

#define perror   FCGI_perror

#undef  fopen

#define fopen    FCGI_fopen

#undef  fclose

#define fclose   FCGI_fclose

#undef  fflush

#define fflush   FCGI_fflush

#undef  freopen

#define freopen  FCGI_freopen

#undef  setvbuf

#define setvbuf  FCGI_setvbuf

#undef  setbuf

#define setbuf   FCGI_setbuf

#undef  fseek

#define fseek    FCGI_fseek

#undef  ftell

#define ftell    FCGI_ftell

#undef  rewind

#define rewind   FCGI_rewind

#undef  fgetpos

#define fgetpos  FCGI_fgetpos

#undef  fsetpos

#define fsetpos  FCGI_fsetpos

#undef  fgetc

#define fgetc    FCGI_fgetc

#undef  getc

#define getc     FCGI_fgetc

#undef  getchar

#define getchar  FCGI_getchar

#undef  ungetc

#define ungetc   FCGI_ungetc

#undef  fgets

#define fgets    FCGI_fgets

#undef  gets

#define gets     FCGI_gets

#undef  fputc

#define fputc    FCGI_fputc

#undef  putc

#define putc     FCGI_fputc

#undef  putchar

#define putchar  FCGI_putchar

#undef  fputs

#define fputs    FCGI_fputs

#undef  puts

#define puts     FCGI_puts

#undef  fprintf

#define fprintf  FCGI_fprintf

#undef  printf

#define printf   FCGI_printf

#undef  vfprintf

#define vfprintf FCGI_vfprintf

#undef  vprintf

#define vprintf  FCGI_vprintf

#undef  fread

#define fread    FCGI_fread

#undef  fwrite

#define fwrite   FCGI_fwrite

#undef  feof

#define feof     FCGI_feof

#undef  ferror

#define ferror   FCGI_ferror

#undef  clearerr

#define clearerr FCGI_clearerr

#undef  tmpfile

#define tmpfile  FCGI_tmpfile

#undef  fileno

#define fileno   FCGI_fileno

#undef  fdopen

#define fdopen   FCGI_fdopen

#undef  popen

#define popen    FCGI_popen

#undef  pclose

#define pclose   FCGI_pclose

#endif /* NO_FCGI_DEFINES */

#if defined (__cplusplus) || defined (c_plusplus)

} /* terminate extern "C" { */

#endif

#endif /* _FCGI_STDIO */

简单fcgi程序的更多相关文章

  1. ACEXML解析XML文件——简单示例程序

    掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...

  2. 用python开发简单ftp程序

    根据alex老师视频开发的简单ftp程序,只能实现简单的get功能 ftp客户端程序: #!/usr/bin/env python #_*_ coding:utf-8 _*_ import socke ...

  3. 关于SIGSLOT的一个简单的程序

    废话少说直接看代码即可,这只是一个简单的程序,可以帮我们简单地明白SIGSLOT是怎么回事.至于深入研究自己去百度吧. #include "sigslot.h" using nam ...

  4. 关于《数据格式修改》的简单应用程序(C语言)

    关于<数据格式修改>的简单应用程序(C语言) 至亲爱的博友: 大家好,好久不见了.由于博主还是一名大学在校生,不可避免的需要和指导教师共同完成一些项目,因此前一段时间暂时停止了博客的更新. ...

  5. 简单购物车程序(Python)

    #简单购物车程序:money_all=0tag=Trueshop_car=[]shop_info={'apple':10,'tesla':100000,'mac':3000,'lenovo':3000 ...

  6. 基于C语言libvirt API简单小程序

    libvirt API简单小程序 1.程序代码如下 #include<stdio.h> #include<libvirt/libvirt.h> int getDomainInf ...

  7. 图解简单C程序的运行时结构

    程序在内存中的存储分为三个区域,分别是动态数据区.静态数据区和代码区.函数存储在代码区,全局变量以及静态变量存储在静态数据区,而在程序执行的时候才会在动态数据区产生数据.程序执行的本质就是代码区的指令 ...

  8. MFC制作简单通讯录程序

    学习c++和MFC一段时间了,苦于没有项目实战,所以自己写了一个简单的简单通讯录程序,以前用c#写简单很多,例程是这本书上的实例,我的第一个winform程序也是从这本书上学的,总结c#写的话更简单, ...

  9. Kubernetes学习笔记之安装minikube并运行个简单应用程序

    前言:本笔记仅记录学习记录,可能存在错误!!!使用的环境是Ubuntu Desktop 20.04,也有用Windows 10 操作的,根据的文档是minikube的文档教程,链接:https://m ...

随机推荐

  1. css hack 如何区分 ie7 ie8

    .style { width:100px; /*火狐以及一般浏览器*/ width:200px\9; /*IE8*/ *width:150px; /*IE7*/ _width:50px; /*IE6* ...

  2. HDOJ 2442 -bricks 状态压缩DP 一直TLE.打表过的..

    有5个砖块..加上一个空着不放..那么有6种状态..所以很明显的可以用6进制的状态DP... 不过这么做..我觉得我已经能优化的都优化了...还是超时..一看数据范围是100*6..打表先AC了.. ...

  3. Jquery发送ajax请求以及datatype参数为text/JSON方式

    Jquery发送ajax请求以及datatype参数为text/JSON方式 1.方式一:datatype:'text' 2.方式二:datatype:'JSON' 3.使用gson-1.5.jar包 ...

  4. !!!!!安卓界面总是显示载入进度条的问题,没事别乱用ListFragment

    近期的安卓应用快完工了.可是个别界面有瑕疵,怎么改动都解决不了.挥之不去的阴影.问题例如以下: 在界面上,数据已经载入完成了.可还是有一股圆形的进度条,感觉它老是在载入什么东西,严重影响界面美观: 1 ...

  5. ASP.NET Aries 开发框架

    开源:ASP.NET Aries 开发框架 前言: 随着岁月的推进,不知不觉已在.NET这领域上战斗了十年了. 青春还没来得急好好感受,却已是步入健忘之秋的老人一枚了. 趁着还有点记忆,得赶紧把硬盘里 ...

  6. HDU 1535 Invitation Cards(SPFA,及其优化)

    题意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接到达终点站,是单向的,每条路线有它自己的车费. 有P个人早上从1出发,他们要到达每一个公交站点, 然后到了晚上再返回点1. ...

  7. Mojo 分析日志接口

    #!/usr/bin/perl #取文件行数 ##循环开始清空文件 use POSIX; use DBI; my $dir = '/data01/applog_backup'; my $file = ...

  8. 用代码定位硬盘上的文件(使用ShellExecute执行explorer /select命令,其它参数也很全)

    问题:如何用代码控制资源浏览器,并定位到指定的文件? 答:使用ShellExecute,配合explorer即可 ShellExecute(Application.Handle, 'open', PC ...

  9. hprose rpc使用实例(同时有Java和Delphi客户端的例子)

    php server <?php require_once('src/Hprose.php'); function hello($name) { echo "Hello $name!& ...

  10. 玩转Windows服务系列——命令行管理Windows服务

    原文:玩转Windows服务系列——命令行管理Windows服务 说到Windows服务的管理就不得不说通过命令行的方式管理Windows服务,因为无论是系统管理员,还是通过编程的方式调用cmd命令, ...