Чтение онлайн

на главную - закладки

Жанры

Программирование для 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]);

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

Опыты

Монтень Мишель
Научно-образовательная:
философия
7.43
рейтинг книги
Опыты

Добыча. Всемирная история борьбы за нефть, деньги и власть

Ергин Дэниел
Документальная литература:
публицистика
5.00
рейтинг книги
Добыча. Всемирная история борьбы за нефть, деньги и власть

Дважды одаренный. Том VI

Тарс Элиан
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
5.50
рейтинг книги
Дважды одаренный. Том VI

Воины

Хобб Робин
Фантастика:
фэнтези
7.00
рейтинг книги
Воины

Вечера в древности

Мейлер Норман
Проза:
классическая проза
историческая проза
5.00
рейтинг книги
Вечера в древности

Годы странствий

Чулков Георгий Иванович
Документальная литература:
биографии и мемуары
6.25
рейтинг книги
Годы странствий

Цикл романов "Целитель". Компиляция. Книги 1-17

Большаков Валерий Петрович
Целитель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Цикл романов Целитель. Компиляция. Книги 1-17

12

Санивский Сергей Анатолиевич
5.00
рейтинг книги
12

Путь Шедара

Кораблев Родион
4. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Путь Шедара

Месть Седьмой

Лор Питтакус
5. Наследие Лориена
Фантастика:
фэнтези
9.05
рейтинг книги
Месть Седьмой

Солнечная система (Астрономия и астрофизика)

Сурдин Владимир Георгиевич
Научно-образовательная:
прочая научная литература
астрономия и космос
5.00
рейтинг книги
Солнечная система (Астрономия и астрофизика)

Газлайтер. Том 19

Володин Григорий Григорьевич
19. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
6.25
рейтинг книги
Газлайтер. Том 19

Законы Рода. Том 5

Мельник Андрей
5. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 5

Техники ландшафтной арт-терапии

Копытин Александр Иванович
Научно-образовательная:
психотерапия и консультирование
5.00
рейтинг книги
Техники ландшафтной арт-терапии