[TUHS] FD 2

Warner Losh imp at bsdimp.com
Mon Jan 30 04:51:43 AEST 2023


On Sun, Jan 22, 2023 at 2:23 PM Warner Losh <imp at bsdimp.com> wrote:

>
>
> On Sat, Jan 21, 2023 at 11:37 AM Warner Losh <imp at bsdimp.com> wrote:
>
>>
>> Yea. Like many things, there was a transition... the most important bit
>> is the shell. And that was more tricky to read through with the phone at
>> breakfast...
>>
>
> OK. I've dug a bit further and Clem and I have chatted...  Here's the
> summary.
>
> We don't have V4's shell, alas, since all we have from that time period is
> the C kernel a few months before the 4th edition release. V5 /bin/sh closes
> fd2 and then dups fd1 to fd2. This creates fd2 as something special. V6
> closes all FD's larger than 1 (2-15) and then does the dup(1) which it
> makes sure returns 2 or it closes the file. While there were features in V6
> to allow use of fd2/stderr, few programs used then.
>
> And neither crypt nor passwd reads from fd2. crypt reads from fd0, while
> passwd doesn't read. It just replaces the hashed password with the new
> password. I've also looked at pr because
>
> >I do remember that pr -p actually read from FD 2. It probably still does.
>
> and that's not true in V7 at least... pr didn't have a 'p' arg :). Maybe
> later programs started to do these things, but most of what went on with V7
> was a transition to most error messages on stderr, which typically went to
> stdout in V6.
>
> So, people remembering it coming in with V7 are right, in the sense it was
> the first release to do it consistently. And the people remembering V4 or
> V5 are also right, in a different sense because the shell was ensuring fd2
> was a copy of fd1 there, which a couple of programs (diff) used for errors.
> And I believe that the impetus for the V7 changes was phototypesetting
> 'file not found' too often...  But that last bit is mostly because I want
> to believe.
>

One last historical footnote. In researching a forthcoming article for the
30th anniversary of FreeBSD, I noticed the following:

https://www.bell-labs.com/usr/dmr/www/hist.pdf contains Dennis Ritchie's
history of the early days of Unix. It was first published in 1979 (so right
around the time V7 was being finalized), and revised/reprinted in the
famous AT&T Bell Laboratories Technical Journal 63 No. 6 Part 2, October
1984 issue. He talks about FD 0 and FD 1 being special in the pdp-7
implementation on page 4:

"The main loop of the shell went as follows:
1) The shell closed all its open files, then opened the terminal special
file for standard input and output (file descriptors 0 and 1).
..."

No mention is made of when fd 2 became standard error in this paper, which
does mention a lot of other unix milestones (hierarchical notation for
directories, fork/exec changes, pipes, etc), but not this one.


> Warner
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://minnie.tuhs.org/pipermail/tuhs/attachments/20230129/aed1b3ef/attachment.htm>


More information about the TUHS mailing list