2016-05-13 74 views
1

我希望父母從標準輸入讀取並將其寫入管道,然後從此管道讀取子文件並將其轉換爲大寫,然後將其發送回另一個管道,然後父級將其打印到標準輸出上,然後再寫入更多文件時間。如何在同一個管道上寫兩次?

如果你想兩次寫入同一管道的家長不寫anthor時間

#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

,你寫它後第一次不要關閉它。只有完成後才能關閉它。