C 在fork之后创建管道

C 在fork之后创建管道,c,fork,pipe,C,Fork,Pipe,这样做可能/正确吗?如果我从“子”进程的fd1[1]写入,那么是否可以从“父”进程的fd2[0]读取 main(){ pid_t pid; pid=fork(); 如果(pid否,用于进程间通信的管道应该在fork()之前创建(否则,您没有简单的方法通过它们发送,因为读取和写入端应该由不同的进程使用) 在socket上以带外消息的形式在进程之间发送文件描述符有一些肮脏的技巧,但我真的忘记了细节,这些细节很难看您需要在分叉之前设置管道 int fds[2]; if (pipe(fds))

这样做可能/正确吗?如果我从“子”进程的fd1[1]写入,那么是否可以从“父”进程的fd2[0]读取

main(){
pid_t pid;
pid=fork();

如果(pid否,用于进程间通信的管道应该在
fork()之前创建(否则,您没有简单的方法通过它们发送,因为读取和写入端应该由不同的进程使用)


在socket上以带外消息的形式在进程之间发送文件描述符有一些肮脏的技巧,但我真的忘记了细节,这些细节很难看

您需要在分叉之前设置管道

int fds[2];

if (pipe(fds))
    perror("pipe");

switch(fork()) {
case -1:
    perror("fork");
    break;
case 0:
    if (close(fds[0])) /* Close read. */
        perror("close");

    /* What you write(2) to fds[1] will end up in the parent in fds[0]. */

    break;
default:
    if (close(fds[1])) /* Close write. */
        perror("close");

    /* The parent can read from fds[0]. */

    break;
}

那你的问题是什么?我看起来不像是你无法测试自己的东西。
int fds[2];

if (pipe(fds))
    perror("pipe");

switch(fork()) {
case -1:
    perror("fork");
    break;
case 0:
    if (close(fds[0])) /* Close read. */
        perror("close");

    /* What you write(2) to fds[1] will end up in the parent in fds[0]. */

    break;
default:
    if (close(fds[1])) /* Close write. */
        perror("close");

    /* The parent can read from fds[0]. */

    break;
}