Книга: Программирование для Linux. Профессиональный подход

Листинг 7.4. (print-environment.c) Отображение переменных среды процесса

Листинг 7.4. (print-environment.c) Отображение переменных среды процесса

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
/* Вывод переменных среды (по одной в строке) процесса
   с заданным идентификатором. */
void print_process_environment(pid_t pid) {
 int fd;
 char filename[24];
 char environment[8192];
 size_t length;
 char* next_var;
 /* Определение полного имени файла environ
    для заданного процесса. */
 snprintf(filename, sizeof(filename), "/proc/%d/environ",
  (int)pid);
 /* Чтение содержимого файла. */
 fd = open(filename, O_RDONLY);
 length = read(fd, environment, sizeof (environment));
 close(fd);
 /* Функция read() не помещает в конец текста нулевой символ,
    поэтому его приходится добавлять отдельно. */
 environment[length] = ' ';
 /* Перебор переменных. Элементы списка отделяются друг от друга
    нулевыми символами. */
 next_var = environment;
 while (next_var < environment + length) {
  /* Вывод элементов списка. Каждый из них оканчивается нулевым
     символом и потому интерпретируется как обычная строка. */
  printf("%sn", next_var);
  /* Переход к следующей переменной. Поскольку каждый элемент
     списка заканчивается нулевым символом, функция strlen()
     вычисляет длину отдельного элемента, а не всего списка. */
  next_var += strlen(next_var) + 1;
 }
}
int main(int argc, char* argv[]) {
 pid_t pid = (pid_t)atoi(argv[1]);
 print_process_environment(pid);
 return 0;
}

Оглавление книги


Генерация: 0.095. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз