Как получить корневой каталог процесса программно? - PullRequest
0 голосов
/ 26 февраля 2019

В Linux у каждого процесса есть собственный корневой каталог.Для большинства процессов это /.Однако chroot может изменить это.Эта информация раскрывается через /proc.Однако, как мне найти корневой каталог процесса программно?Для этого есть системный вызов или функция libc?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Я не знаю, есть ли другой способ, но многие программы полагаются на машиночитаемые файлы в /proc, чтобы получить дополнительную информацию о процессах, и в этом нет ничего плохого.

Вотпример процесса, который находит свой собственный корневой каталог программно через /proc:

#include <stdio.h>
#include <limits.h>
#include <unistd.h>

int main() {
  char foo[PATH_MAX+1];
  int count = readlink("/proc/self/root", foo, PATH_MAX);
  if(count < 0) {
    perror("Can't find root dir (is /proc mounted here?)");
  } else {
    foo[count]=0;
    printf("My root dir is %s\n", foo);
  }
}
0 голосов
/ 26 февраля 2019

Ну, нет.Для этого существует команда pwdx, вот ее код https://elixir.bootlin.com/busybox/latest/source/procps/pwdx.c.. Она также читает корневой каталог из / proc.Вы можете получить pid вашего процесса, используя функцию getpid.

...