7.2.1. Файл /proc/self

We use cookies. Read the Privacy and Cookie Policy

7.2.1. Файл /proc/self

В файловой системе /proc есть дополнительный элемент, позволяющий программам находить информацию о своем собственном процессе. Файл /proc/self является символической ссылкой на каталог, соответствующий текущему процессу. Естественно, содержимое ссылки меняется в зависимости от того, кто к ней обращается.

Например, программа, представленная в листинге 7.2, с помощью файла /proc/self определяет свой идентификатор процесса (это делается лишь в демонстрационных целях, гораздо проще пользоваться функцией getpid(), описанной в разделе 3.1.1, "Идентификаторы процессов"). Для чтения содержимого символической ссылки вызывается функция readlink() (описана в разделе 8.11, "Функция readlink(): чтение символических ссылок").

Листинг 7.2. (get-pid.c) Получение идентификатора процесса из файла /proc/self

#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

/* Определение идентификатора вызывающего процесса

   на основании символической ссылки /proc/self. */

pid_t get_pid_from_proc_self() {

 char target[32];

 int pid;

 /* Чтение содержимого символической ссылки. */

 readlink("/proc/self", target, sizeof(target));

 /* Адресатом ссылки является каталог, имя которого соответствует

    идентификатору процесса. */

 sscanf(target, "%d", &pid);

 return (pid_t)pid;

}

int main() {

 printf("/proc/self reports process id %d ",

  (int)get_pid_from_proc_self());

 printf("getpid() reports process id %d ", (int)getpid());

 return 0;

}