LINUX.ORG.RU

История изменений

Исправление 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, то его с радостью примут.

Но ещё более вероятно, что просто впишут в документацию что читать с начала и до конца :)