From mboxrd@z Thu Jan 1 00:00:00 1970 From: arisawa Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Message-Id: <37C9151F-A1AD-48E8-92CA-F155AFCA537E@gmail.com> Date: Mon, 27 Mar 2017 19:17:52 +0900 To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net> Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\)) Subject: [9fans] pipe: bug or feature? Topicbox-Message-UUID: b7a96354-ead9-11e9-9d60-3106f5b1d025 Hello, I have been playing with an experimental code on pipe. the program read a file and write it to one end of pipe and then read it = from another end of pipe. the buffer for writing pipe is named buf0, and for reading pipe is named = buf. and I found the program does not finish unless sizeof(buf) > = sizeof(buf0). is this a bug or feature of pipe? Kenji Arisawa =3D=3D=3D BEGIN a.c =3D=3D=3D #include #include char *argv0; void usage(void) { fprint(2,"usage: %s file\n",argv0); exits("usage"); } void main(int argc, char *argv[]) { int fd,pfd[2]; char buf[256]; char buf0[256]; /* need to be sizeof(buf) > sizeof(buf0) * but this condition is very curious to me */ int n; char *file; argv0 =3D argv[0]; argc--;argv++; USED(argc); if(argv[0] =3D=3D nil) usage(); file =3D argv[0]; fd =3D open(file,OREAD); if(fd < 0) sysfatal("no such file"); if(pipe(pfd) < 0) sysfatal("pipe error"); print("pfd: %d %d\n",pfd[0],pfd[1]); while((n =3D read(fd,buf0,sizeof(buf0))) > 0){ print("read: %d %s\n",n,file); n =3D write(pfd[1],buf0,n); print("write: %d\n",n); } close(pfd[1]); while((n =3D read(pfd[0],buf,sizeof(buf))) > 0){ buf[n] =3D 0; print("%d %s\n",n,buf); } print("%d\n",n); =09 exits(nil); } =3D=3D=3D END a.c =3D=3D=3D