Запись и чтение в файловую систему linux /proc/... без lseek()
В этом исходном коде http://man7.org/tlpi/code/online/dist/sysinfo/procfs_pidmax.c.html файл /proc/sys/kernel/pid_max
сначала просто читать (используя read
syscall), а затем просто написано (используя write
Системный вызов).
Почему нет необходимости lseek
в начале, прежде чем писать? Я думал, что указатель смещения файла одинаков для чтения и записи (это то, что говорит автор соответствующих книг).
2 ответа
Это из-за /proc
не настоящая файловая система, так pid_max
записи обрабатываются таким образом, что вам не нужно seek
, Я даже не знаю, поддерживаются ли поиски здесь.
Просто чтобы дать вам ощущение того, как отличается /proc
файлы здесь - ссылка на довольно старую, но иллюстративную ошибку ядра, специально связанную с pid_max
: https://bugzilla.kernel.org/show_bug.cgi?id=13090
Эта ссылка должна объяснить вам еще больше деталей: THE / proc FILESYSTEM
И, наконец, статья developerWorks "Доступ к ядру Linux с помощью файловой системы / proc" с пошаговой иллюстрацией кода модуля ядра, который имеет API / proc FS. Это выглядит на 100%, что вам нужно.
Я посмотрел на исходный код ядра, файлы в / proc / sys / находятся под управлением таблицы sysctl, обратные вызовы чтения / записи для каждого смещения файла поддержки записи. "pid_max entry" имеет одно значение int для работы и, следовательно, смещение в этих обратных вызовах фактически не используется.