Как узнать, какие входные файлы используются двумя программами на Си? - PullRequest
0 голосов
/ 30 июня 2019

Когда я выполняю две программы на Си в Linux, я могу напечатать их локальный / приватный дескриптор файла, используя fileno(). Это означает, что когда я запускаю две независимые программы рядом и печатаю fileno() в каждой из них, 3 печатается для первого открытого файла, 4 печатается для второго открытого файла и так далее.

Поэтому, используя fileno(), невозможно узнать, какие входные файлы разделены между ними.

Есть ли способ напечатать имя входного файла, которое используется двумя программами на Си?

1 Ответ

2 голосов
/ 01 июля 2019

используйте

readlink /proc/<pid>/fd/* | sort -u > /tmp/process-<pid>.out

, чтобы создать файл со списком всех файлов, открытых процессом с PID <pid>.затем используйте comm (1) для поиска общих файлов, как показано ниже:

comm -12 /tmp/process-<pid1>.out /tmp/process-<pid2>.out

Обратите внимание, что в этом списке будут перечислены все файлы, используемые этими программами.

если вы знаете, что конкретные файловые дескрипторы, используемые программой, например, 3,4,5,9,11,12, замените первую команду на:

readlink /proc/<pid>/fd/{3,4,5,9,11,12} | sort -u > /tmp/process-<pid>.out

Если вы не знаете файлдескрипторы, и вы хотите предположить, что все файловые дескрипторы, которые открыты для чтения (включая stdin), являются входными файлами, вам придется сделать что-то более умное, прочитав /proc/<pid>/fdinfo/<file-descriptor>, который печатает поле flags, которое имеетэта информация.

...