Я использую strace чтобы сообщать о системных вызовах open и chdir , и фрагмент ее вывода:

6791  chdir("//etc")                    = 0
6791  open("etc/fstab", O_RDONLY)       = 3

Это не имеет смысла. Сначала мы спускаемся в каталог /etc , затем тот же процесс пытается оттуда открыть относительный файл etc/fstab . Вызов завершается успешно, но такого файла /etc/etc/fstab . Есть только файл /etc/fstab .

Почему strace сообщает etc/fstab а не /etc/fstab как следует?

1 ответ1

0

Ну ... очевидно POSIX допускает такую вещь, как ведущий двойной слеш в именах путей. Это означает, что не корневой каталог, как можно было бы подумать, а зависящий от реализации. Я думаю, что в этом случае //etc Действительно совпадает с / . Я знаю, что это безумие, но это единственное, что я могу придумать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .