Как получить дескрипторы/дескрипторы открытых файлов с помощью libprocps в программе на языке C

Достаточно просто:

$ sed -E 's/,[^ ]+//g' in
chrX_143483005-chr6_103649292 chrX_143483110-chr_6103649147   chrX_143483004-chr6_103649293
chrX_143483110-chr_6103649147   chrX_143483005-chr6_103649292 0
0   chrX_143483005-chr6_103649292 chrX_143482988-chr6_103649147
chrX_143483005-chr6_103649292 0   chrX_143483110-chr_6103649147
0   chrX_143483005-chr6_103649292 chrX_143482988-chr6_103649147

(расширенное )регулярное выражение /,[^ ]+/будет соответствовать любой последовательности символов, состоящей из запятой и следующей за ней последовательности символов, не являющихся пробелами.

Команда sedsзаменит любое совпадение первого аргумента (в данном случае заданным выражением ), вторым аргументом (в данном случае ничего ); опция gкоманды sговорит, что эту замену следует выполнять для всех найденных совпадений, а не только для первого.

0
26.03.2021, 12:46
1 ответ

Вы не можете получить эту информацию из libprocps, но ее можно получить для каждого процесса,подсчитав количество ссылок в каталоге (это эквивалент вашей команды ls /proc/[pid]/fd | wc -l):

#include <dirent.h>

...

int fds = 0;
DIR * dirp;
struct dirent * entry;

dirp = opendir("/proc/.../fd"); /* You need to build the path */
while ((entry = readdir(dirp)) != NULL) {
    if (entry->d_type == DT_LNK) {
         fds++;
    }
}
closedir(dirp);

Вам нужно будет добавить обработку ошибки -к приведенному выше.

Если вы хотите получить общее количество выделенных файловых дескрипторов, посмотрите на/proc/sys/fs/file-nr:первое число — это количество выделенных файловых дескрипторов.

0
28.04.2021, 22:56

Теги

Похожие вопросы