Программирование для 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 программа является обобщением программы, которая была показана в листинге 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]);
Поделиться:
Популярные книги
Я снова царь. Книга XXXIII
33. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я С СССР! Том III
3. Я спас СССР
Фантастика:
альтернативная история
5.86
рейтинг книги
Deus vult
3. Путь князя
Фантастика:
фэнтези
рпг
попаданцы
5.00
рейтинг книги
Курс 1. Сентябрь
1. Маркатис
Фантастика:
аниме
фэнтези
сказочная фантастика
5.00
рейтинг книги
Мастер 3
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Одержимая (авторский сборник)
Фантастика:
фэнтези
научная фантастика
7.80
рейтинг книги
Воин-Врач
1. Воин-Врач
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
6.00
рейтинг книги
История США от глубокой древности до 1918 года
Популярная наука от Азимова
Научно-образовательная:
история
5.00
рейтинг книги
Законник Российской Империи. Том 2
2. Словом и делом
Фантастика:
городское фэнтези
альтернативная история
аниме
дорама
6.40
рейтинг книги
Господин из завтра. Тетралогия.
Фантастика:
альтернативная история
8.32
рейтинг книги
Меткий стрелок
1. Меткий стрелок
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Родословная. Том 1
1. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Солдат Империи
1. Страж
Фантастика:
попаданцы
альтернативная история
6.67
рейтинг книги
Вечный. Книга I
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00