Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20200626160624.GZ6430@brightrain.aerifal.cx>
Date: Fri, 26 Jun 2020 12:06:24 -0400
From: Rich Felker <dalias@...c.org>
To: musl@...ts.openwall.com
Subject: Re: errno not set to EBADF when reading from invalid
 descriptor

On Fri, Jun 26, 2020 at 07:14:00AM +0200, Markus Wichmann wrote:
> On Thu, Jun 25, 2020 at 11:38:04AM -0400, Rich Felker wrote:
> > Note that there are lots of other reasons you can't safely use stdio
> > read functions on a stream you don't know is suitable for it.
> > Switching from writing to reading without a successful flush produces
> > UB, and switching the other direction without a successful seek does,
> > even if the FILE stream is open for both.
> 
> So I can't actually use a FILE open for reading and writing that refers
> to something non-seekable, like a serial line, to both read and write to
> it? I mean, I suppose I could write something and then flush and stay in
> read mode forever, but that is not really the nature of my application.
> I suppose I'll just open the serial line twice.

Indeed, you basically always need 2 FILEs for bidirectional io. The
only case where you don't is when it's a normal seekable file and
you're willing to follow the arcane rules for switching modes (which
may make sense if it's a trivial case like writing whole file,
rewinding, then only reading from that point forward, which is a
fairly canonical use case for tmpfile()).

Rich

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.