On 12/29/21 9:17 AM, Clem Cole wrote:
Not until the BSD rename system call,.
Try it on V6 or V7 and you will get 'directory exists' as an error.
Sure enough. I never really noticed. I guess cuz I was careful about
creating directories in the first place.
Think about the UNIX FS and the link system call. How
is mv
implemented? You link the file to the new directory and the unlink
it from the old one. But a directory file can not be in two
directories at the same time as the .. link would fail. When Joy
created the rename system call it became possible. Until System V
picked it up (IIRC was SVR3), only system that supported the BSD world.
Nice summary. I will add it to my systems programming investigations list.
What I have forgotten is if the BSD mv command for 4.1
supported it.
If it did then it was not atomic -- it would have had to create the
new directory, move the contents independently and then remove the old
one.
FWIW: when we did the first SMP UNIX at Masscomp we had supported the
BSD FS and the 4.1c/4.2 system calls. Joy's implementation of rename
was a real mess. Making it atomic, supporting an SMP and deal with
all the recovery paths on an error took some work. It's funny, the
rename system call is a simple idea, but on a failure when
partially thru it, makes unwinding the partial completion an
interesting problem.
It's impressive what early work was done and how few
today really
understand the challenges that were met and overcome to give us our
cushy oses.
Clem
On Wed, Dec 29, 2021 at 9:34 AM Will Senn <will.senn(a)gmail.com> wrote:
I'm a little flummoxed in trying to move some directories around
in svr2. Shouldn't the following work?
mkdir a
mkdir b
mv a b
I get the following error:
mv: b exists
I tried many of the possible variants including:
mv a b/
mv: b/ exists
mv a b/a
mv: directory rename only
cd b
mv ../a .
mv: . exists
mv ../a ./
mv: ./ exists
mv ../a ./a
mv: directory rename only
If moving directories into existing directories wasn't allowed in
those days, 1) how were directories managed? and 2) when did
moving directories into directories become a thing?