Linux программирование в примерах

На нашем литературном портале можно бесплатно читать книгу Linux программирование в примерах, Роббинс Арнольд-- . Жанр: Программирование / ОС и Сети. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Linux программирование в примерах
Название: Linux программирование в примерах
Дата добавления: 16 январь 2020
Количество просмотров: 975
Читать онлайн

Linux программирование в примерах читать книгу онлайн

Linux программирование в примерах - читать бесплатно онлайн , автор Роббинс Арнольд

В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.

 

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

Перейти на страницу:

struct rusage {

 struct timeval ru_utime; /* используемое время пользователя */

 struct timeval ru_stime; /* используемое системное время */

 long ru_maxrss;   /* максимальный размер резидентного набора */

 long ru_ixrss;    /* общий размер разделяемой памяти */

 long ru_idrss;    /* общий размер не разделяемых данных */

 long ru_isrss;    /* общий размер не разделяемого стека */

 long ru_minflt;   /* использование страниц */

 long ru_majflt;   /* ошибок страниц */

 long ru_nswap;    /* подкачек */

 long ru_inblock;  /* блочных операций ввода */

 long ru_oublock;  /* блочных операций вывода */

 long ru_msgsnd;   /* посланных сообщений */

 long ru_msgrcv;   /* полученных сообщений */

 long ru_nsignals; /* полученных сигналов */

 long ru_nvcsw;    /* добровольных переключений контекста */

 long ru_nivcsw;   /* принудительных переключений контекста */

};

Чисто BSD системы (4.3 Reno и более поздние) поддерживают все поля. В табл. 9.2 описаны доступность различных полей

struct rusage
для POSIX и Linux.

Таблица 9.2. Доступность полей

struct rusage

Поле POSIX Linux Поле POSIX Linux
ru_utime
≥ 2.4
ru_nswap
≥2.4
ru_stime
≥2.4
ru_nvcsw
≥2.6
ru_minflt
≥2.4
ru_nivcsw
≥2.6
ru_majflt
≥2.4

Стандартом определены лишь поля, помеченные «POSIX». Хотя Linux определяет полную структуру, ядро 2.4 поддерживает лишь поля времени пользователя и системного времени. Ядро 2.6 поддерживает также поля, связанные с переключением контекста. [92]

Наиболее интересными полями являются

ru_utime
и
ru_stime
, использование времени процессора в режиме пользователя и ядра соответственно. (Время процессора в режиме пользователя является временем, потраченным на исполнение кода уровня пользователя. Время процессора в режиме ядра является временем, потраченным в ядре в пользу процесса.)

Эти два поля используют

struct timeval
, которая содержит значения времени с точностью до микросекунд. Дополнительные сведения по этой структуре см. в разделе 14.3.1 «Время в микросекундах:
gettimeofday()
».

В BSD 4.2 и 4.3 аргумент

status
функций
wait()
и
wait3()
был
union wait
. Он умещался в
int
и предоставлял доступ к тем же сведениям, которые выдают современные макросы
WIFEXITED()
и др., но через членов объединения. Не все члены были действительными во всех случаях. Эти члены и их использование описаны в табл. 9.3.

Таблица 9.3.

union wait
4.2 и 4.3 BSD

Макрос POSIX Член объединения Использование Значение
WIFEXITED()
w_termsig
w.w_termsig == 0
True при нормальном завершении
WEXITSTATUS()
w_retcode
code = w.w_retcode
Статус завершения, если не по сигналу
WIFSIGNALED()
w_termsig
w.w_temsig != 0
True, если завершен по сигналу
WTERMSIG()
w_termsig
sig = w.w_termsig
Сигнал, вызвавший завершение
WIFSTOPPED()
w_stopval
w.w_stopval == WSTOPPED
True, если остановлен
WSTOPSIG()
w_stopsig
sig = w.w_stopsig
Сигнал, вызвавший остановку
WCOREDUMP()
w_coredump
w.w_coredump != 0
True, если потомок сделал снимок образа

POSIX не стандартизует

union wait
, a BSD 4.4 не документирует его, используя вместо этого макросы POSIX. GLIBC делает несколько бросков, чтобы заставить использующий его старый код продолжать работать. Мы опишем его здесь главным образом для того, чтобы вы увидев его — узнали; новый код должен использовать макросы, описанные в разделе 9.1.6.1 «Использование функций POSIX:
wait()
и
waitpid()
».

Перейти на страницу:
Комментариев (0)
название