Возможно, вас интересуют дисковые квоты (которые поддерживаются некоторыми, но не всеми, файловыми системами). Низкоуровневый системный вызов - quotactl (2) . Возможно, будет достаточно использовать существующие инструменты quota (1) и quotacheck
, edquota
, warnquota
, quotaon
и т. Д. ....
Если вы хотите знать память, используемую данным процессом, рассмотрите системный вызов getrusage (2) . Вы также можете читать псевдофайлы в /proc/self/
или /proc/1234
для pid 1234. Вы также можете сканирование /proc/
(используя обычные процедуры сканирования каталогов: opendir (3) с циклом readdir (3) с stat (2) , закрытием с closedir
...) для числовых каталогов (поскольку /proc/1234/
описывает процесс pid 1234). Подробнее о proc (5) (например, /proc/self/maps
или /proc/1234/smaps
и /proc/1234/status
и т. Д.). Вы можете запросить виртуальное адресное пространство процесса 1234, прочитав псевдофайлы /proc/1234/status
и /proc/1234/maps
. Попробуйте, например, cat /proc/$$/status
и cat /proc/$$/maps
в терминале, чтобы запросить информацию для вашего текущего процесса оболочки.
Конечно, рассмотрим также команды du (1) и df (1) (возможно, их нужно вызывать осторожно через popen (3) если вы хотите получить их вывод). Если по каким-либо причинам вы хотите рекурсивно сканировать дерево файлов (например, для подсчета его накопленного использованного размера, как это делает du
), рассмотрите возможность использования функций nftw (3) . См. Также stat (2) и statfs (2) syscalls.
Помните, что другие процессы могут (и часто делают) писать в файловую систему, пока ваша программа исследует или запрашивает ее. И ваш пользователь может запускать новые процессы (возможно, косвенно, например, с помощью crontab (5) , system (3) , fork (2) и execve (2) , at
, batch
, ssh
...) в любое время.
Прочтите также хорошую книгу по программированию для Linux, возможно, старую Расширенное программирование для Linux и syscalls (2)