2016-05-13 6 views
1

親が標準入力から読み込んでパイプに書き込んだ後、このパイプから読み込んだ子を大文字に変換し、別のパイプで親に返すようにしてから、親が標準出力に出力してからさらに出力します時間。同じパイプに2回書く方法は?

親はあなたが同じパイプに二度書きたい場合は、あなたがそれに初めて書き込みした後、はそれをを閉じないでください

#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 
} 
+0

スペースバーを保存せずにコードを適切にインデントして、あなたが意図したことを読み込めるようにしてください。 –

+1

また、forkの失敗時に 'case 0:'のコードを実行することにも注意してください! 'case -1:'の最後に改行を加えてください。 –

+1

テキストエディタとして使用している人(コードをインデントしていない人)は、わかりません。 Windowsのメモ帳?現代のコードエディタのほとんどはあなたのためにそれをやっているだけで、あなたがそれを防ぐために何らかの努力をしなければなりません。 –

答えて

1

anthor時間を書き込みません。あなたが終わったらそれを閉じるだけです。

関連する問題