首页 > 解决方案 > 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");
}

标签: clinuxpipeipc

解决方案


推荐阅读