Марк Митчелл - Программирование для Linux. Профессиональный подход

Тут можно читать онлайн Марк Митчелл - Программирование для Linux. Профессиональный подход - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Вильямс, год 2002. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Программирование для Linux. Профессиональный подход
  • Автор:
  • Жанр:
  • Издательство:
    Вильямс
  • Год:
    2002
  • Город:
    Москва
  • ISBN:
    5-8459-0243-6
  • Рейтинг:
    3.6/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Марк Митчелл - Программирование для Linux. Профессиональный подход краткое содержание

Программирование для Linux. Профессиональный подход - описание и краткое содержание, автор Марк Митчелл, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Данная книга в основном посвящена программированию в среде GNU/Linux. Авторы применяют обучающий подход, последовательно излагая самые важные концепции и методики использования расширенных возможностей системы GNU/Linux в прикладных программах. Читатели научатся писать программы, к интерфейсу которых привыкли пользователи Linux; освоят такие технологии, как многозадачность, многопотоковое программирование, межзадачное взаимодействие и взаимодействие с аппаратными устройствами; смогут улучшить свои программы, сделав их быстрее, надежнее и безопаснее; поймут особенности системы GNU/Linux, ее ограничения, дополнительные возможности и специфические соглашения.

Книга предназначена для программистов, уже знакомых с языком С и имеющих базовый опыт работы в GNU/Linux.

Программирование для Linux. Профессиональный подход - читать онлайн бесплатно полную версию (весь текст целиком)

Программирование для Linux. Профессиональный подход - читать книгу онлайн бесплатно, автор Марк Митчелл
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

root. Является символической ссылкой на корневой каталог процесса (обычно это /). Корневой каталог можно сменить с помощью команды chrootили функции chroot().

stat. Содержит статистическую информацию о процессе. Эти же данные представлены в файле status, но здесь они находятся в неотформатированном виде и записаны в одну строку. Такой формат труден для восприятия, зато проще в плане синтаксического анализа.

statm. Содержит информацию об использовании памяти процессом, описан в разделе 7.2.6. "Статистика использования процессом памяти".

status. Содержит статистическую информацию о процессе, причем в отформатированном виде; описан в разделе 7 2.7, "Статистика процесса".

cpu. Этот файл появляется только в симметричных многопроцессорных системах и содержит информацию об использовании процессорного времени (пользователями и системой).

Из соображений безопасности права доступа к некоторым файлам предоставляются только владельцу процесса и суперпользователю.

7.2.1. Файл /proc/self

В файловой системе /procесть дополнительный элемент, позволяющий программам находить информацию о своем собственном процессе. Файл /proc/selfявляется символической ссылкой на каталог, соответствующий текущему процессу. Естественно, содержимое ссылки меняется в зависимости от того, кто к ней обращается.

Например, программа, представленная в листинге 7.2, с помощью файла /proc/selfопределяет свой идентификатор процесса (это делается лишь в демонстрационных целях, гораздо проще пользоваться функцией getpid(), описанной в разделе 3.1.1, "Идентификаторы процессов"). Для чтения содержимого символической ссылки вызывается функция readlink()(описана в разделе 8.11, "Функция readlink(): чтение символических ссылок").

Листинг 7.2. ( get-pid.c ) Получение идентификатора процесса из файла /proc/self

#include

#include

#include

/* Определение идентификатора вызывающего процесса

на основании символической ссылки /proc/self. */

pid_t get_pid_from_proc_self() {

char target[32];

int pid;

/* Чтение содержимого символической ссылки. */

readlink("/proc/self", target, sizeof(target));

/* Адресатом ссылки является каталог, имя которого соответствует

идентификатору процесса. */

sscanf(target, "%d", &pid);

return (pid_t)pid;

}

int main() {

printf("/proc/self reports process id %d\n",

(int)get_pid_from_proc_self());

printf("getpid() reports process id %d\n", (int)getpid());

return 0;

}

7.2.2. Список аргументов процесса

Файл cmdlineв файловой системе /proc содержит список аргументов процесса (см. раздел 2.1.1. "Список аргументов"). Этот список представлен одной строкой, в которой аргументы отделяются друг от друга нулевыми символами. Большинство функций работы со строками предполагает, что нулевым символом оканчивается вся строка, поэтому они не смогут правильно обработать файл cmdline.

В листинге 2.1 приводилась программа, которая отображала переданный ей список аргументов. Теперь, когда мы узнали назначение файлов cmdlineфайловой системы /proc, можно написать программу, отображающую список аргументов другого процесса. Ее текст показан в листинге 7.3. Поскольку в строке файла cmdlineможет содержаться несколько нулевых символов, ее длину нельзя определить с помощью функции strlen()(она лишь подсчитывает число символов, пока не встретится нулевой символ). Приходится полагаться на функцию read(), которая возвращает число прочитанных байтов.

Листинг 7.3. ( print-arg-list.c ) Отображение списка аргументов указанного процесса

#include

#include

#include

#include

#include

#include

/* Вывод списка аргументов (по одному в строке) процесса

с заданным идентификатором. */

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

#include

#include

#include

#include

#include

/* Вывод переменных среды (по одной в строке) процесса

с заданным идентификатором. */

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);

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Марк Митчелл читать все книги автора по порядку

Марк Митчелл - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Программирование для Linux. Профессиональный подход, автор: Марк Митчелл. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x