home *** CD-ROM | disk | FTP | other *** search
- 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
-
-