在两个程序之间用c创建管道

时间:2016-03-24 22:01:06

标签: c pipe fork

我一直致力于在两个程序reader.c和writer.c之间创建一个管道。我无法获得管道程序的输入。管道程序应该接受一个int,将它发送到writer程序,然后将其输出通过管道传输到读取器程序中以进行最终输出。下面是三个类的代码。我想我很接近,但任何人都可以帮助我将初始的int输入argv [2]输入到编写器类中,然后进入读者类吗?

管道程序(communicat.c)

int main(int argc, char *argv[])
{   
    int fd[2];
    pid_t   childpid;
    int result;

    if (argc != 2) 
    {
            printf("usage: communicate count\n");
            return -1;
    }
    pipe(fd);

    childpid = fork();

    if (childpid == -1)
    {
         printf("Error in fork; program terminated\n");
         return -1;
    }

    if(childpid == 0)
    {
            close(1);
            dup(fd[1]);
            execlp("writer", "writer", fd[1],(char *) NULL);  
    }
    else
    {
           childpid = fork();
    }
    if( childpid == 0)
    {
           close(0);
           dup(fd[0]);
           close(fd[0]);
           close(fd[1]);
           execlp("reader", "reader", (char *) NULL); 
    }
    else
    {
          close(fd[0]);
          close(fd[1]);
          int status;
          wait(&status);
    }
    return(0);
}

Reader.c

int main()
{
   int count; /* number of characters in the line */
   int c; /* input read */
   count = 0; 
   while ((c = getchar())!= EOF) 
   {
        putchar(c); count++;
        if (count == LINELENGTH) 
        {
              putchar('\n'); count = 0;
        }
   }
   if (count > 0) 
        putchar('\n');
    return 0;
}

Writer.c

int main(int argc, char *argv[])
{
     int count; /* number of repetitions */
     int i; /* loop control variable */

    if (argc != 2) 
    {
         printf("usage: writer count\n");
         return -1;
    }
    else count = atoi(argv[1]);

    for (i = 0; i < count; i++) 
    {
        printf("Hello");
        printf("hello");
    }
    return 0; 
}

1 个答案:

答案 0 :(得分:1)

以这种方式纠正执行编写的代码:

if(childpid == 0)
{
    close(1);
    dup(fd[1]);
    close(fd[0]);
    close(fd[1]);
    execlp("writer", "writer", argv[1], (char *) NULL);  
}