From: Skip Tavakkolian <skip.tavakkolian@gmail.com>
To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net>
Subject: Re: [9fans] pipe: bug or feature?
Date: Sun, 2 Apr 2017 16:44:51 +0000 [thread overview]
Message-ID: <CAJSxfmJY4VsHF6HUBhg20FideFmWDHXpMFRu1+kGUcSC=tgSMA@mail.gmail.com> (raw)
In-Reply-To: <20170402123359.GA18347@ax.s16>
[-- Attachment #1: Type: text/plain, Size: 2778 bytes --]
good catch! the behavior makes sense now.
On Sun, Apr 2, 2017 at 5:34 AM Antons Suspans <antox@ml.lv> wrote:
> This was writing a \0 just past end of buf[], into memory alloted for
> pfd[0].
> See the explanation by Alex in the 9front list:
> /n/9front.org/lists/9front/1490668028.00
>
> On Sun, Apr 02, 2017 at 07:34:52AM +0000, Skip Tavakkolian wrote:
> > this is either a bug in devpipe or the documentation is misleading. the
> man
> > page seems to say that the pair of fd's returned by pipe(2) are
> symmetrical,
> > but it matters which fd of the pair is used for writing. if you switch
> around
> > pfd[0] and pfd[1], it works as you'd expect.
> >
> > On Fri, Mar 31, 2017 at 5:29 PM arisawa <karisawa@gmail.com> wrote:
> >
> > Hello,
> >
> > I was playing with an experimental code on pipe and met with a problem
> which
> > I don’t understand.
> >
> > the program reads a file and writes it to one end of pipe and then
> reads 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
> >
> > === BEGIN a.c ===
> > #include <u.h>
> > #include <libc.h>
> >
> > 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 = argv[0];
> > argc--;argv++;
> > USED(argc);
> > if(argv[0] == nil)
> > usage();
> > file = argv[0];
> > fd = 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 = read(fd,buf0,sizeof(buf0))) > 0){
> > print("read: %d %s\n",n,file);
> > n = write(pfd[1],buf0,n);
> > print("write: %d\n",n);
> > }
> > close(pfd[1]);
> > while((n = read(pfd[0],buf,sizeof(buf))) > 0){
> > buf[n] = 0;
> > print("%d %s\n",n,buf);
> > }
> > print("%d\n",n);
> >
> > exits(nil);
> > }
> > === END a.c ===
> >
>
>
[-- Attachment #2: Type: text/html, Size: 5375 bytes --]
next prev parent reply other threads:[~2017-04-02 16:44 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-28 0:05 arisawa
2017-04-02 2:55 ` Skip Tavakkolian
2017-04-02 7:34 ` Skip Tavakkolian
2017-04-02 8:01 ` arisawa
2017-04-02 12:33 ` Antons Suspans
2017-04-02 16:44 ` Skip Tavakkolian [this message]
2017-04-02 17:20 ` Charles Forsyth
-- strict thread matches above, loose matches on Subject: below --
2017-03-27 10:17 arisawa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAJSxfmJY4VsHF6HUBhg20FideFmWDHXpMFRu1+kGUcSC=tgSMA@mail.gmail.com' \
--to=skip.tavakkolian@gmail.com \
--cc=9fans@9fans.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).