Date: Tue, 10 Sep 2002 13:03:39 -0700 From: Bakul Shah <bakul@bitblocks.com> To: Archie Cobbs <archie@dellroad.org> Cc: freebsd-arch@FreeBSD.ORG Subject: Re: /dev/stdout behavior Message-ID: <200209102003.QAA28365@thunderer.cnchost.com> In-Reply-To: Your message of "Tue, 10 Sep 2002 10:58:02 PDT." <200209101758.g8AHw2C33935@arch20m.dellroad.org>
next in thread | previous in thread | raw e-mail | index | archive | help
> Bakul Shah writes: > > > For example, if you use fcntl() to set flags on fd 0, and then open > > > /dev/stdout, the new file descriptor you get back will have those > > > same flags set. Run the program below to see an example. This is > > > in agreement with the man page, which states that opening /dev/stdout > > > is equivalent to dup(2)'ing fd 0. > > > > Careful reading of man stdout will reveal that opening > > /dev/stdout is equivalent to dup()ing fd 1, not fd 0. > > Arg, this whole time I meant to use '1' instead of '0'... > > But, hey-- now there's an even bigger bug! As the accidental discoverer of the bug, you should report it! dup(2) says that everything but the close-on-exec flag is shared by the new fd with the old fd. So (except for this bigger bug) the FreeBSD behavior is correct as verified by changing if ((flags = fcntl(0, F_GETFL, 0)) == -1) err(1, "fcntl"); if (fcntl(0, F_SETFL, flags | O_NONBLOCK) == -1) to if ((flags = fcntl(1, F_GETFL, 0)) == -1) err(1, "fcntl"); if (fcntl(1, F_SETFL, flags | O_NONBLOCK) == -1) You need to fix your test program similarly and run it under Linux to see if the two OSes behave differently. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200209102003.QAA28365>