Запись и чтение в файловую систему 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 для работы и, следовательно, смещение в этих обратных вызовах фактически не используется.

Другие вопросы по тегам