Given the following code, why does cat only print the contents of the pipe after I've typed \n or CTRL+D? What are the conditions for cat to actually print what it read?
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(void){ int pid,p[2]; char ch; pipe(p); if((pid=fork()) == -1){ fprintf(stderr,"Error:can't create a child!\n"); exit(2); } if(pid){ close(p[0]); while((ch=getchar())!=EOF){ write(p[1],&ch,1); } close(p[1]); wait(0); }else{ close(p[1]); close(0); dup(p[0]); close(p[0]); execlp("cat","cat",NULL); } return 0; }
caton its own on the command line, you'll see it doesn't print anything until you press Return or Ctrl+D. That's the expected behavior.while ((ch=getchar()) != EOF) { write(1,&ch,1); }doesn't print anything until you press Return or Ctrl+D, either.