Я читаю книгу "Среда программирования Unix". В ней при обсуждении каталогов часто используется команда od
для получения восьмеричного дампа содержимого каталогов. Но где-то с 1984 года использование od
для каталога было отключено на MacBook (возвращает 'is a directory'). Похоже, что он также был отключен для каталогов в linux.
Какие-нибудь альтернативные команды я могу использовать?
Ядро OS X запрещает операции чтения (2)
для каталогов , поэтому вы никогда не сможете использовать инструменты пространства пользователя для чтения записей каталога напрямую .
Если вы хотите читать записи каталога из пользовательского пространства, вам нужно напрямую открыть базовое блочное устройство, прочитать его суперблоки, найти корневой индексный дескриптор, прочитать записи, чтобы рекурсивно найти следующий каталог в цепочке, чтобы найти интересующий вас каталог и , затем вы можете читать записи каталога. По сути, вы напишете драйвер файловой системы пользовательского пространства для выполнения этой задачи.
В старых системах Unix было много умного, но это определенно было неудобно - единственный способ создать каталоги в в те дни это было через mkdir (1)
команду , которая была setuid-root, потому что создание каталогов должно было выполняться с помощью системного вызова mknod (2)
. Таким образом, программы обычно вызывают system ("mkdir / path / to / foo"); chdir ("/ path / to / foo");
для создания нового каталога.
Согласно http://www.unix.com/unix-advanced-expert-users/35034-using-od-directory.html это ограничение gnu od, и есть "проблема" с ней и в версии FreeBSD (на чем, я думаю, основан Дарвин.)
Это может зависеть от файловой системы, судя по тому, что написано на сайте. Он также сказал, что это работает с каталогами при использовании в Solaris.
По сути, похоже, что инструкции зависят от того, какую версию UNIX вы используете. Я не могу найти обходного пути, чтобы заставить это работать с каталогом.