Почему rmdir и удаляют связь с двумя отдельными системными вызовами?

Это происходит, потому что у Вас есть другой экран, уже активный в этом случае DP2. DP2 вот монитор, убегающий из DisplayPort. Ноутбуком является Lenovo x230, и он был загружен с Ультраосновой 3 базовых блока.

Можно решить этот вопрос путем простого выключения экранного использования,

xrandr --output DP2 --off

Теперь, в XFCE или подобной рабочей станции необходимо видеть настольное уменьшение области. Затем можно продолжить выполнять Ваш xrandr команды, поскольку Вы обычно были бы,

xrandr --auto
xrandr ...
9
20.08.2014, 01:49
1 ответ

Директории особенные в том смысле, что внутри директории можно иметь ссылки на несколько файлов и директорий, поэтому, если удалить родительскую директорию, то все эти файлы теряют свою точку отсчета, откуда к ним можно получить доступ, то же самое происходит и с процессом. Для таких случаев rmdir() имеют различные проверки, отличные от unlink():

  • Если каталог не пуст. Если каталог не пустой, он не может удалить его до тех пор, пока содержимое не будет unlink'd/removed.

     ENOTEMPTY
     имя пользователя содержит записи, отличные от ... и ... ; или, имя пользователя содержит
     ...как его последний компонент. POSIX.1-2001 также позволяет EEXIST для
     это условие.
    
  • Если каталог используется. Если процесс теряет свой текущий каталог, это может привести к проблемам и неопределенному поведению. Лучше предотвратить их.

     Каталог EBUSY в настоящее время используется системой или каким-либо процессом, который
     препятствует его удалению. В Linux это означает, что в настоящее время
     используется в качестве точки монтирования или является корневым каталогом вызова
     процесс.
    

В случае unlink() этих проверок не существует. Фактически, вы можете удалить имя файла с помощью unlink() и процесс, который все еще использует/ссылает на него ссылку, может модифицировать его без проблем. Файл существует до тех пор, пока дескриптор файла не существует, просто недоступен для нового процесса (если только вы не знаете, где искать). Это часть волшебства радужных цветов файловых систем *NIX.

Теперь есть unlinkat(), который ведет себя как оба, unlink() или rmdir(2) в зависимости от того, какой путь вы ожидаете.

8
27.01.2020, 20:07

Теги

Похожие вопросы