Я читаю "Среда программирования Unix". При обсуждении каталогов часто используется od
команда для получения восьмеричного дампа содержимого каталогов. Но в некоторых случаях с 1984 года использование od
в каталоге был отключен на MacBook (возвращает «это каталог»). Похоже, он также был отключен для каталогов в Linux.
Какие альтернативные команды я мог бы использовать?
Ядро OS X запрещает read(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 вы используете. Я не могу найти известного обходного пути, чтобы заставить это работать с каталогом.