c - 如何在循环中使用管道,我的正确吗?

标签 c unix pipe fork posix

我想知道我对管道的使用是否正确,这段代码位于fork()子进程中,pfd是管道指针:

char buf[1024];
while(1){
    signal(SIGUSR1, OnSigUsr1);
    sleep(10000);
    if(get==1){
        get=0;
        close(pfd[1]);
        read(pfd[0], buf, sizeof(buf));
        close(pfd[0]);
    }
}

父代码中的另一段代码:

char buffer[1024];
/*put something in buffer*/
close(pfd[0]);
if(write(pfd[1], buffer, strlen(buffer))==-1){
     printf("error write\n");
};
close(pfd[1]);
kill(fpid,SIGUSR1);

我的问题是缓冲区只能从 fork() 写入和获取一次,下次不能再次写入管道并返回 error write。我想知道是不是我哪里做错了。谢谢。

最佳答案

您只能将数据写入打开的文件描述符。父级在写入缓冲区后执行 close(pfd[1]);,子级在读取缓冲区后执行 close(pfd[0]);。如果您将再次使用文件描述符,请不要关闭它,而是在程序退出之前关闭所有打开的文件描述符。

关于c - 如何在循环中使用管道,我的正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39921501/

相关文章:

unix - 在 IBM i qsh 中使用 Unix ls 在 ifs 上的文件的对象列表

Bash 双进程替换给出了错误的文件描述符

c++ - 浮点格式会受到大端和小端的影响吗?

c++ - 条件中的 Switch 语句和 & 号

linux - 脚本中的别名

linux - & 在 Unix 中的 shell 脚本和进程创建中的使用

c - 使用 fdopen 时文件描述符错误?

C 管道标准输出到 fork

c - 将波形发生器初始化为特定频率

c - struct成员变量的内存分配