我有一个奇怪的问题。我正在开发一个简单的程序,该程序应该通过网络将从标准输入获取的数据发送到该程序的另一个实例,该实例应该将数据直接发送到标准输出。但它没有按应有的方式工作,只发送了一部分数据。之后,我设法找出从标准输入读取的问题出在哪里:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define SIZE 1024
int main(void) {
char *buffer;
int read_bytes;
buffer = (char *) malloc(sizeof(char)*SIZE);
while ((read_bytes = read(STDIN_FILENO,buffer,SIZE)) == SIZE) {
write(STDOUT_FILENO,buffer,SIZE);
fprintf(stderr,"read %d bytes\n",read_bytes);
}
fprintf(stderr,"read %d bytes\n",read_bytes);
write(STDOUT_FILENO,buffer,read_bytes);
return 0;
}
(这只是为了简单地说明问题,而不是原始代码的实际部分)
它一切正常(-> 将数据从标准输入重新发送到标准输出),直到我从需要更多时间的东西中获取信息,例如:
find / | ./the_programme > output.file
输出在几千字节后停止,我真的很困惑为什么(肯定没有完成)。我尝试使用 fcntl 清除 STDIN_FILENO 上的 O_NONBLOCK 标志,但它根本没有帮助。我可能在这里遗漏了一些非常基本的东西,但是手册页和谷歌搜索都没有帮助我。