Вход/Регистрация
Программирование для Linux. Профессиональный подход
вернуться

Самьюэл Алекс

Шрифт:

 372 ? S 0:00 syslogd -m 0

% ./print-arg-list 372

syslogd

– m

0

В данном случае программа

print-arg-list
, сообщает о том, что демон
syslogd
вызван с аргументами
– m 0
.

7.2.3. Переменные среды процесса

Файл

environ
содержит список переменных среды, в которой работает процесс (см. раздел 2.1.6, "Среда выполнения"). Как и в случае файла
cmdline
, элементы списка разделяются нулевыми символами. Формат элемента таков:
ПЕРЕМЕННАЯ=значение
.

Представленная в листинге 7.4 программа является обобщением программы, которая была показана в листинге 2.3. В данном случае программа принимает в командной строке идентификатор процесса и отображает список его переменных среды, извлекаемый из файловой системы

/proc
.

Листинг 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] = ' \0';

 /* Перебор переменных. Элементы списка отделяются друг от друга

нулевыми символами. */

 next_var = environment;

 while (next_var < environment + length) {

/* Вывод элементов списка. Каждый из них оканчивается нулевым

символом и потому интерпретируется как обычная строка. */

printf("%s\n", 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;

}

7.2.4. Исполняемый файл процесса

Файл

exe
указывает на исполняемый файл процесса. В разделе 2.1.1, "Список аргументов", говорилось о том, что имя исполняемого файла обычно передается в качестве первого элемента списка аргументов. Но это лишь распространенное соглашение. Программу можно запустить с произвольным списком аргументов. Файл
exe
файловой системы
/proc
— это более надежный способ узнать, какой исполняемый файл запущен процессом.

Во многих программах путь ко вспомогательным файлам задан относительно исполняемого файла, поэтому важно знать, где именно он находится. Функция

get_executable_path
в листинге 7.5 определяет путевое имя текущего исполняемого файла, проверяя символическую ссылку
/proc/self/exe
.

Листинг 7.5. (get-exe-path.c) Определение путевого имени текущего исполняемого файла

#include <limits.h>

#include <stdio.h>

  • Читать дальше
  • 1
  • ...
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: