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. 屏幕编程 F4的帮组用法

    PROCESS ON VALUE-REQUEST. * 设置帮助(工作中心)  FIELD wa_zppt026-arbpl MODULE mdl_arbpl_f4. *&---------- ...

  2. perl 异步请求和JS对比

    perl 异步和js对比: /js************** $(function(){ function isPhone(str){ var regex = /[0-9]{11,11}/; ret ...

  3. Velocity教程-脚本语法详解(转)

    Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象. 当Veloci ...

  4. best javascript framework list -- 最好的js框架

    Javascript Framework List | Top Javascript Framework List | Best Javascript Framework List http://co ...

  5. ZOJ 1859 Matrix Searching(二维线段树)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1859 Matrix Searching Time Limit: 10 Seco ...

  6. How to write simple HTTP proxy with Boost.Asio

    How to write simple HTTP proxy with Boost.Asio How to write simple HTTP proxy with Boost.Asio Russia ...

  7. fragment Trying to instantiate a class com.example.testhuanxindemo.MyFragment that is not a Fragmen

    在使用fragment的时候,先创建了一个fragment,然后为他创建布局,并在oncreateview中返回载入该视图的后返回的view,在activity的布局文件里,使用xml布局,用frag ...

  8. 【矩阵乘】【NOI 2012】【cogs963】随机数生成器

    963. [NOI2012] 随机数生成器 ★★ 输入文件:randoma.in 输出文件:randoma.out 简单对照 时间限制:1 s 内存限制:128 MB **[问题描写叙述] 栋栋近期迷 ...

  9. sql2005,sql2008,sql2012清空日志语句

    原文:sql2005,sql2008,sql2012清空日志语句 sql2005清空日志语句 Backup Log DbName WITH no_log GO DUMP TRANSACTION DbN ...

  10. hdu1695(莫比乌斯反演)

    传送门:GCD 题意:求[1,n],[1,m]gcd为k的对数. 分析:莫比乌斯入反演门题,gcd(x,y)==k等价于gcd(x/k,y/k)==1,求出[1,n][1,m]互质的对数,在减去[1, ...