C管:父母在孩子结束前从孩子读书

use*_*279 5 c fork pipe

下面的代码显示了一个子进程如何一个端再怎么父进程可以读取从另一端.我在实验代码后注意到的是,只有在子进程终止后,父进程才能读取数据.

是否有办法强制父进程到达前台并在子进程调用write()后立即读取数据?有没有办法在不终止孩子的情况下读取数据?

#include <stdio.h> /* For printf */
#include <string.h> /* For strlen */
#include <stdlib.h> /* For exit */

#define READ 0 /* Read end of pipe */
#define WRITE 1 /* Write end of pipe */
char *phrase = "This is a test phrase.";
main(){
    int pid, fd[2], bytes;
    char message[100];

    if (pipe(fd) == -1) { /* Create a pipe */
        perror("pipe"); 
        exit(1); 
    }
    if ((pid = fork()) == -1) { /* Fork a child */
        perror("fork"); 
        exit(1); 
    }
    if (pid == 0) { /* Child, writer */
        close(fd[READ]); /* Close unused end */
        write(fd[WRITE], phrase, strlen(phrase)+1);
        close(fd[WRITE]); /* Close used end */
    } 
    else { /* Parent, reader */
        close(fd[WRITE]); /* Close unused end */
        bytes = read(fd[READ], message, sizeof(message));
        printf("Read %d bytes: %s\n", bytes, message);
        close(fd[READ]);  /* Close used end */
    }
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*rge 2

你不正确。sleep(120)尝试在关闭“子”部分中管道的写入端之前添加调用并运行您的应用程序。