Программирование для Linux. Профессиональный подход
Шрифт:
void print_process_arg_list(pid_t pid) {
int fd;
char filename[24];
char arg_list[1024];
size_t length;
char* next_arg;
/* Определение полного имени файла cmdline
для заданного процесса. */
snprintf(filename, sizeof(filename), "/proc/%d/cmdline",
(int)pid);
/*
Чтение содержимого файла. */
fd = open(filename, O_RDONLY);
length = read(fd, arg_list, sizeof(arg_list));
close(fd);
/* Функция read не помещает в конец текста нулевой символ,
поэтому его приходится добавлять отдельно. */
arg_list[length] = '\0';
/* Перебор аргументов. Аргументы отделяются друг от друга
нулевыми символами. */
next_arg = arg_list;
while (next_arg < arg_list + length) {
/* Вывод аргументов. Каждый из них оканчивается нулевым
символом и потому интерпретируется как обычная строка. */
printf("%s\n", next_arg);
/* Переход к следующем аргументу. Поскольку каждый аргумент
заканчивается нулевым символом, функция strlen вычисляет
длину отдельного аргумента, а не всего списка. */
next_arg += strlen(next_arg) + 1;
}
}
int main(int argc, char* argv[]) {
pid_t pid = (pid_t)atoi(argv[1]);
print_process_arg_list(pid);
return 0;
}
Предположим, к примеру, что номер процесса системного демона
syslogd
равен 372. % ps 372
PID TTY STAT TIME COMMAND
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 программа
/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]);
Поделиться:
Популярные книги
Измена. Тайный наследник
1. Тайный наследник
Фантастика:
фэнтези
5.00
рейтинг книги
Инквизитор Тьмы
1. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Наследник
3. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Ротмистр Гордеев 3
3. Ротмистр Гордеев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
(Не)нужная жена дракона
5. Хроники Драконьей империи
Любовные романы:
любовно-фантастические романы
6.89
рейтинг книги
Идеальный мир для Лекаря 28
28. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Сыночек в награду. Подари мне любовь
1. Суровые отцы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Инквизитор Тьмы 2
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Генерал Скала и ученица
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Искатель 1
1. Валинор
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Сердце Дракона. Том 10
10. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.14
рейтинг книги
Печать мастера
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Выстрел на Большой Морской
4. Сыщик Его Величества
Детективы:
исторические детективы
полицейские детективы
8.64
рейтинг книги
Кодекс Крови. Книга VII
7. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
аниме
5.00