Path: utzoo!attcan!uunet!usenix!jsq From: brnstnd@kramden.acf.nyu.edu (Dan Bernstein) Newsgroups: comp.std.unix Subject: Re: Standards Update, IEEE 1003.4: Real-time Extensions Message-ID: <541@usenix.ORG> Date: 24 Sep 90 21:40:07 GMT References: <495@usenix.ORG> <523@usenix.ORG> <539@usenix.ORG> Sender: jsq@usenix.ORG Organization: IR Lines: 38 Approved: jsq@usenix.org (Moderator, John Quarterman) X-Submissions: std-unix@uunet.uu.net Submitted-by: brnstnd@kramden.acf.nyu.edu (Dan Bernstein) In article <539@usenix.ORG> peter@ficc.ferranti.com (Peter da Silva) writes: > But where things have moved closer > to the underlying principles (everything is a file, for example) it's become > the better for it. The underlying principle is that everything is a file *descriptor*. > > Sometimes there are objects which would be > > reasonable to treat with filesystem semantics for which there is no > > reasonable mechanism for introducing them into the filesystem name > > space. > This seems reasonable, but the rest is a pure argument from authority. > Could you repeat these arguments for the benefit of hose of us who don't > have the good fortune to know these networking experts you speak of? The filesystem fails to deal with many (most?) types of I/O that aren't reliable, static, and local. Here's an example: In reality, you initiate a network stream connection in two stages. First you send off a request, which wends its way through the network. *Some time later*, the response arrives. Even if you aren't doing a three-way handshake, you must wait a long time (in practice, up to several seconds on the Internet) before you know whether the open succeeds. In the filesystem abstraction, you open a filename in one stage. You can't do anything between initiating the open and finding out whether or not it succeeds. This just doesn't match reality, and it places a huge restriction on programs that want to do something else while they communicate. You can easily construct other examples, but one should be enough to convince you that open() just isn't sufficiently general for everything that you might read() or write(). ---Dan Volume-Number: Volume 21, Number 129