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
}
スペースバーを保存せずにコードを適切にインデントして、あなたが意図したことを読み込めるようにしてください。 –
また、forkの失敗時に 'case 0:'のコードを実行することにも注意してください! 'case -1:'の最後に改行を加えてください。 –
テキストエディタとして使用している人(コードをインデントしていない人)は、わかりません。 Windowsのメモ帳?現代のコードエディタのほとんどはあなたのためにそれをやっているだけで、あなたがそれを防ぐために何らかの努力をしなければなりません。 –