c - c管道等待消息达到一定大小然后发送?
问题描述
我在父子之间的 IPC 通信中使用管道。孩子使用标准输出发送消息。而父母在读取功能时被阻止。
问题是孩子没有一一发送消息。当它达到一定大小(我认为是 4096 个字符)时,它会同时将其中的一些发送到一起。
这是我的阅读功能:
void waitMessage(int id,char* buffer,int* size,struct Pipe * pipes){
printf("waiting %d\n",id);
char c = '\0';
int i = 0;
fprintf(stderr,"recieved: ");
fcntl( pipes[id].fd[0][0], F_SETFL, fcntl(pipes[id].fd[0][0], F_GETFL) | O_NONBLOCK);
int res = -1;
while(res == -1)
res = read(pipes[id].fd[0][0],&c,1);
while(res != -1){
buffer[i] = c;
printf("%c",buffer[i]);
i++;
res = read(pipes[id].fd[0][0],&c,1);
}
(*size) = i;
printf("\n");
}
- 请忽略我对该功能的非阻塞使用
解决方案
推荐阅读
- winforms - PowerShell 表单按钮文本未正确对齐且模糊
- javascript - 级联 JS 函数 - 如何将变量从一个函数传输到另一个函数
- reactjs - 无法在另一个函数中运行函数:无法读取未定义的属性“测试”/无法读取未定义的属性“setState”
- r - 如何为小时数据创建日平均函数
- c++ - C++17中复制构造函数的继承
- webpack - 如何使用 webpack 启动 json-server?
- javascript - 如何在失败/没有互联网时暂停网络请求并在互联网可用时执行?
- python - 追加和更新dict的Python评估策略
- reactjs - ReactJs、TypeScript、MobX - 无法在商店数据更新时获得 MobX 刷新屏幕
- scala - 使用 spark 从 hdfs 读取文本文件的问题