18.2.8 SHTTPD支持CGI的分析设计

18.2.8  SHTTPD支持CGI的分析设计

Web服务器中的CGI是一段外部程序,它可以动态地生成代码,并可以接收输入的参数。支持CGI主要分为如下几个部分:

q      CGI运行程序和输入参数的分析;

q      一个进程运行CGI程序,将CGI程序的输出发给与客户端通信的进程;

q      与客户端通信的进程生成头部信息,并将CGI运行进程的输出发给客户端。

CGI程序及参数的分析用于得到CGI程序和CGI程序运行时的输入参数。例如对于一个请求http://localhost/add?a+b,在服务器端运行的CGI程序为add,参数为ab,用于计算ab之和。

一个完整的CGI程序执行过程如图18.12所示。在分析CGI程序和参数之后,需要建立进程间通信管道,便于执行CGI程序时接收CGI程序结果。然后进程分叉,主进程负责与客户端进行通信,先分析得到头部信息,然后与CGI执行程序进程通信,读取CGI执行的结果,最后关闭进程后退出。

执行CGI程序是一个相对来说比较复杂的设计,采用进程间的管道通信方式,来获得CGI程序的输出并发送到客户端。CGI执行程序的输出为标注输出,为了在主进程中能够获得CGI执行进程的CGI输出,这里采用了进程间的管道通信方式并使用了文件描述符的复制操作,将CGI执行进程中管道的一端与标准输出绑定起来,CGI程序的输出数据会进行管道,主程序可以在另一端接收到CGI执行结果在标准输出的结果。

如图18.13所示,构建CGI执行程序的过程主要分为如下步骤:

1)建立管道。

2)进程分叉,分为主进程和CGI进程,主进程负责与客户端通信,CGI进程负责执行CGI程序。

在主进程中:

s.1)关闭输入管道的写端,留下读端,这个管道另一端在CGI进程中与CGI的标准输出绑定在一起。

s.2)从管道中读取数据。

s.3)将数据发送到客户端。

s.4)如果数据结束等待CGI进程结束。

 

 

 

 

18.12  CGI程序的执行过程

CGI进程中:

c.1)关闭管道的读端,留下写端,这个管道与主进程中管道的读端相连,用于将CGI执行结果发送给主进程。

c.2)将此管道的写端与进程的标准输出绑定在一起。

c.3)关闭写管道。

 

 

18.13  CGI进程构建过程

3)执行程序。

具体的管道构建过程如图18.14所示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值