Я пытаюсь найти этот ответ во всем, но не нашел его. Давайте возьмем пример первый:Что на самом деле происходит, если вы удаляете рабочий каталог, как это делает ядро?
$ cd /tmp
$ mkdir foo
$ cd foo
$ pwd
/tmp/foo
$ $SHELL
$ rmdir /tmp/foo
$ exit
$ pwd
/tmp/foo
$ ls
<no output>
$ man ls
man: can't change directory to '': No such file or directory
man: command exited with status 255: (cd && LESS=-ix8RmPm Manual page ls(1) ?ltline %lt?L/%L.:byte %bB?s/%s..?e (END):?pB %pB\%.. (press h for help or q to quit)$PM Manual page ls(1) ?ltline %lt?L/%L.:byte %bB?s/%s..?e (END):?pB %pB\%.. (press h for help or q to quit)$ MAN_PN=ls(1) pager -s)
$ echo -e '#include<unistd.h>\n#include<stdio.h>\n#include<stdlib.h>\nint main(){char*p=getcwd(NULL,0);printf("%s\\n",p);free(p);}' | gcc -x c -
/usr/bin/ld: cannot open output file a.out: No such file or directory
collect2: error: ld returned 1 exit status
$ cd $PWD
cd: no such file or directory: /tmp/foo
Что здесь происходит внутренне? Как ядро справляется с такими ситуациями? Если предполагается, что текущий каталог остается в виде дескриптора файла, Почему все эти команды не работают?
И, (по крайней мере, для меня), что еще более важно, почему есть no Защита от такого рода вещей? Мне кажется, что это может привести к серьезным проблемам безопасности легко ...
Это не объясняет, почему такие вещи, как «человек» или даже «прикосновение», терпят неудачу. – 3442
Сообщение об ошибке из 'man' объясняет это: он пытается перейти к текущему каталогу, но имя не существует. – Barmar
«Переход к текущему каталогу». - Разве это уже не процесс? – 3442