首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从web服务器读取标准输入

从web服务器读取标准输入
EN

Stack Overflow用户
提问于 2014-10-06 12:48:51
回答 1查看 568关注 0票数 2

我想在LINUX (SLES64)上的C CGI程序中处理POST数据

在第一步中,我获得了具有内容长度的HTTP头。

现在我想从标准输入中读取POST数据。

我想读取最多5000字节的cgi数据。每一个有更多的帖子都会被忽略!

代码语言:javascript
复制
number_of_bytes_read = read(0, buffer, content_length); 

现在有一个特殊情况:

用户在浏览器中填写表单,然后单击submit。

apache web服务器接收请求头和表单数据。

Apache接受请求头“内容长度”,在本例中为4875字节,也使用4875字节长的“字节流”。

现在,Apache创建了一个新进程,它将最终处理cgi数据。

Apache必须将cgi数据的4875字节交给新进程。

他是怎么做到的?

他是否正在执行进程间通信,那么Apache是否正在为新进程创建套接字?

在这种情况下,cgi程序可能会遇到以下问题:

CGI程序获取内容长度,想一次读取4875字节,但由于网络延迟,第一次只读取4300字节。

但是,如果Apache不为新的cgi进程(进程间通信)创建一个套接字,那么cgi程序是否也不会在第一次捕获所有字节呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-06 13:00:15

由于网络延迟和其他因素,read可能不会返回5000字节。您希望读到EOF,或者读取的字节数达到5000,或者read返回错误代码,例如在循环中调用read。来自读(2)手册:

在成功的情况下,返回读取的字节数(零表示文件的结束),文件位置由这个数字前进。如果这个数字小于请求的字节数,这并不是一个错误;例如,这可能是因为现在实际可用的字节较少(可能是因为我们接近文件末尾,或者因为我们从管道或终端读取),或者因为read()被一个信号中断了。 On error,-1被返回,并且errno被适当设置。在这种情况下,未指定文件位置(如果有的话)是否发生更改。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26216577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档