如何在同一管道上写两次?

时间:2016-05-13 16:17:06

标签: c linux ubuntu-14.04

我希望父级从标准输入读取并在管道上写入然后子级从此管道读取并将其转换为大写并将其在另一个管道上发送回父级,然后父级将其打印在标准输出上然后写更多一次。

父母不会写蚂蚁时间

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <unistd.h>
#define bufsize 200

int main(int argc,char*argv[])
{
    char buf[bufsize];
    char buf2[bufsize];
    int x;
    int child;
    int fd[2];
    int fd1[2];
    int nbytes,mbytes;
    int i,j,k;
    int status=0;

    if(pipe(fd)==-1)
        printf("pipe");
    if(pipe(fd1)==-1)
        printf("pipe");

    switch(fork())
    {
        case -1 : printf("fork");
        case 0:{
            //for(k=1;k<3;k++)
            //{close(fd[1]);
            nbytes = read(fd[0], buf, bufsize);   

            for(i=0;i<=strlen(buf);i++){
                if(buf[i]>=97&&buf[i]<=122)
                buf[i]=buf[i]-32;
            }//end for

            close(fd1[0]);
            write(fd1[1], buf, nbytes);
            _exit(EXIT_SUCCESS);   

        }//end child

        default:{
            for(j=1;j<3;j++){
                close(fd[0]);
                printf("Enter any thing:\n");
                x=read(STDIN_FILENO, buf, bufsize);
                write(fd[1],buf,x);

                close(fd1[1]);
                mbytes = read(fd1[0], buf, bufsize);   
                close(fd1[0]); 
                write(STDOUT_FILENO, buf, mbytes);
            }
            //wait(status);
            exit(EXIT_SUCCESS);
        }//end default
    }//end switch
}

1 个答案:

答案 0 :(得分:1)

如果您想在同一个管道上写两次,在第一次写入它之后不要将它关闭。只有在你完成后才关闭它。