История изменений
Исправление vel, (текущая версия) :
Еще один теоретик...
Ленивые жопы разработчики написали код:
kernel/sysctl.c:
static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table, int write, void *buffer,
...
if (!tbl_data || !table->maxlen || !*lenp || (*ppos && !write)) {
*lenp = 0;
return 0;
}
Если читаем (!write) и pos != 0, то вот вам EOF.
Уверен, что этому коду дохрена лет.
И об этом нигде не написано, нигде не написано, как это делать в ЯП высокого уровня. Нигде не написано, что cat /proc/PID/smaps неправильно, правильно только dd...
В Documentation/filesystems/proc.rst намекают
Note: reading /proc/PID/maps or /proc/PID/smaps is inherently racy (consistent output can be achieved only in the single read call).
Под лежачий камень ничего не течёт.
Уверен, что если кто-то из вас оторвёт свою задницу от уютного кресла/дивана и запостит патч в linux-kernel для корректного чтения данных из procfs, то его с радостью примут.
Но ещё более вероятно, что просто впишут в документацию что читать с начала и до конца :)
Исходная версия vel, :
Еще один теоретик...
Ленивый жопы разработчики написали код:
kernel/sysctl.c:
static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table, int write, void *buffer,
...
if (!tbl_data || !table->maxlen || !*lenp || (*ppos && !write)) {
*lenp = 0;
return 0;
}
Если читаем (!write) и pos != 0, то вот вам EOF.
Уверен, что этому коду дохрена лет.
И об этом нигде не написано, нигде не написано, как это делать в ЯП высокого уровня. Нигде не написано, что cat /proc/PID/smaps неправильно, правильно только dd...
В Documentation/filesystems/proc.rst намекают
Note: reading /proc/PID/maps or /proc/PID/smaps is inherently racy (consistent output can be achieved only in the single read call).
Под лежачий камень ничего не течёт.
Уверен, что если кто-то из вас оторвёт свою задницу от уютного кресла/дивана и запостит патч в linux-kernel для корректного чтения данных из procfs, то его с радостью примут.
Но ещё более вероятно, что просто впишут в документацию что читать с начала и до конца :)