9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
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 --]

  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).