2

我目前正在查看以下在 C 中使用管道的代码:

/*****************************************************************************
Excerpt from "Linux Programmer's Guide - Chapter 6"
(C)opyright 1994-1995, Scott Burkett
***************************************************************************** 
MODULE: pipe.c
*****************************************************************************/

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main(void)
{
    int     fd[2], nbytes;
    pid_t   childpid;
    char    string[] = "Hello, world!\n";
    char    readbuffer[80];

    pipe(fd);

    if((childpid = fork()) == -1)
    {
            perror("fork");
            exit(1);
    }

    if(childpid == 0)
    {
            /* Child process closes up input side of pipe */
            close(fd[0]);

            /* Send "string" through the output side of pipe */
            write(fd[1], string, (strlen(string)+1));
            exit(0);
    }
    else
    {
            /* Parent process closes up output side of pipe */
            close(fd[1]);

            /* Read in a string from the pipe */
            nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
            printf("Received string: %s", readbuffer);
    }

    return(0);
}

此代码仅用于将字符串传输给父级一次。我现在正在尝试向父级发送第二个字符串。执行第二个 write 语句(是的,我创建了一个 string2):

write(fd[1], string, (strlen(string)+1));
write(fd[1], string2, (strlen(string2)+1));

为了让父母注册第二次写入,我还需要做什么?

谢谢你的帮助

4

1 回答 1

-1

冒着明显的风险,请尝试:

        /* Send "string" through the output side of pipe */
        write(fd[1], string, (strlen(string)+1));
        write(fd[1], string, (strlen(string)+1));
        // etc.
        exit(0);
     }
      else
     {
        /* Parent process closes up output side of pipe */
        close(fd[1]);

        /* Read in a string from the pipe */
        nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
        printf("Received string: %s", readbuffer);

        nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
        printf("Received string: %s", readbuffer);

        // etc.

也就是说,只需编写更多字符串更重要的是还要阅读它们!?但是您可能会问其他问题,所以请澄清您的问题。

于 2013-09-16T03:50:25.713 回答