我想在LINUX(SLES64)上的C CGI程序中处理POST数据从Web服务器读取标准输入
第一步,我得到带有内容长度的HTTP标头。
现在我想从标准输入中读取POST数据。
我想读取大约5000字节的CGI数据。每个帖子都会被忽略!
number_of_bytes_read = read(0, buffer, content_length);
现在有一个特殊情况:
用户填写在浏览器中的表单,然后他点击提交。
apache web服务器接收请求头和表单数据。
Apache将请求标头“content-length”,在本例中为4875个字节,也需要使用长度为“字节流”的4875个字节的 。
现在Apache创建一个新的进程,最终将处理cgi数据。
Apache必须将cgi数据的4875个字节交给新进程。
他是怎么做到的?
他是否正在执行进程间通信,Apache是否正在为新进程创建一个套接字?
在这种情况下,另一边,CGI程序可以遇到以下问题:
CGI程序获取内容长度,希望在一次通过读取4875个字节,但由于 网络延迟得到第一次只有4300字节。
但是,如果Apache没有创建一个套接字到新的cgi进程(进程间通信),可能 它是因为cgi程序也不能在第一次获取所有字节?
“*您要读取直到您读取EOF ... *”,或者直到所有调用read()返回的值的总和为5000或read()返回为止。 -1'。 – alk 2014-10-06 13:02:40
感谢您的接触,我更新了我的答案。 – CalumMcCall 2014-10-06 13:04:07