返回信息流最近在看一个纯C写的服务器,在执行CGI时候大概流程是:
建立两个管道,cgi_input 和 cgi_output, 并 fork 一个进程。
在子进程中,把 STDOUT 重定向到 cgi_outputt 的写入端,把 STDIN 重定向到 cgi_input 的读取端,关闭 cgi_input 的写入端 和 cgi_output 的读取端,设置 request_method 的环境变量,GET 的话设置 query_string 的环境变量,POST 的话设置 content_length 的环境变量,这些环境变量都是为了给 cgi 脚本调用,接着用 execl 运行 cgi 程序。
在父进程中,关闭 cgi_input 的读取端 和 cgi_output 的写入端,如果 POST 的话,把 POST 数据写入 cgi_input,已被重定向到 STDIN,读取 cgi_output 的管道输出到客户端,该管道输入是 STDOUT。接着关闭所有管道,等待子进程结束。这一部分比较乱,见下图说明:
https://camo.githubusercontent.com/cd2c864c743f7135829e728efc15d4e16af1bc71/687474703a2f2f696d672e626c6f672e6373646e2e6e65742f32303134313232363137333232323735303f77617465726d61726b2f322f746578742f6148523063446f764c324a736232637559334e6b626935755a585176616d4e71597a6b784f413d3d2f666f6e742f3561364c354c32542f666f6e7473697a652f3430302f66696c6c2f49304a42516b46434d413d3d2f646973736f6c76652f37302f677261766974792f43656e746572
https://camo.githubusercontent.com/ddc3e769843c534bcecf8b9c191f4d923c5190a3/687474703a2f2f696d672e626c6f672e6373646e2e6e65742f32303134313232363136313131393938313f77617465726d61726b2f322f746578742f6148523063446f764c324a736232637559334e6b626935755a585176616d4e71597a6b784f413d3d2f666f6e742f3561364c354c32542f666f6e7473697a652f3430302f66696c6c2f49304a42516b46434d413d3d2f646973736f6c76652f37302f677261766974792f43656e746572
那么问题是,在这里标准输入输出的管道起什么作用呢?UNIX学得一般,看了点皮毛,诚心请教
这是一条镜像帖。来源:北邮人论坛 / www-technology / #40718同步于 2018/3/21
WWWTechnology机器人发帖
【问题】服务器执行发送cgi脚本为什么要把管道重定向到标准输入
YcForever
2018/3/21镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。