我正在使用 c 编写代理服务器。我在不同的地方结合使用 fread 和 fgets 已经走得很远了,但我想调和并理解其中的区别。在下面的示例中,我尝试在我以前成功使用 fget 的地方使用 fread。相反,我的服务器现在卡在 fread 线上。有什么区别,为什么我的程序会挂起?
void HandleTCPClient(int clntSocket)
{
FILE *request = fdopen(clntSocket, "r");
char reader[2000];
size_t q; //typo before
while((q=fread(reader, 1, sizeof(reader), request))>0) { //hangs here!
printf("i read something!\n");
}
return;
}
谢谢!!
编辑:所以如果我将行“while((q=fread(reader, 1, 1, request))>0) {”
我的屏幕上到处都是“我读了一些东西”...
不知道这是什么意思。那么,如果流中的字符数少于您缓冲区的大小,fread 将不执行任何操作是否正确?
最佳答案
fgets
在读取换行符时返回,而 fread
将阻塞,直到请求的字节数在流中或 EOF 上可用。在您的情况下,调用会阻塞,因为您没有在流中准备好 2000 字节的数据。
关于c - fread 在 socket 上停滞但 get 没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14008977/