Майкл Джонсон - Разработка приложений в среде Linux. Второе издание

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

Майкл Джонсон - Разработка приложений в среде Linux. Второе издание краткое содержание

Разработка приложений в среде Linux. Второе издание - описание и краткое содержание, автор Майкл Джонсон, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

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

Разработка приложений в среде Linux. Второе издание - читать онлайн бесплатно полную версию (весь текст целиком)

Разработка приложений в среде Linux. Второе издание - читать книгу онлайн бесплатно, автор Майкл Джонсон
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

int getrlimit(int resource, struct rlimit *rlim);

int setrlimit(int resource, const struct rlimit *rlim);

Обе эти функции используют структуру struct rlimit, определенную следующим образом:

struct rlimit {

long int rlim_cur; /* мягкое ограничение */

long int rlim_max; /* жесткое ограничение */

};

Второй член структуры — rlim_max, указывает жесткое ограничение лимита, переданного в параметре resource, a rlim_cur— мягкое ограничение. Это те же наборы лимитов, которыми манипулируют команды ulimitи limit, одна из которых встроена в большинство командных оболочек.

10.4. Примитивы процессов

Несмотря на относительно длинную дискуссию, необходимую для описания процесса, создание и уничтожение процессов в Linux достаточно просто.

10.4.1. Создание дочерних процессов

В Linux предусмотрены два системных вызова, которые создают новые процессы: fork()и clone(). Как упоминалось ранее, clone()используется для создания потоков, и этот вызов будет кратко описан далее. А сейчас мы сосредоточимся на fork()— наиболее популярном методе создания процессов.

#include

pid_t fork(void);

Этот системный вызов имеет уникальное свойство возвращать управление не один раз, а дважды: один раз в родительском процессе и другой — в дочернем. Обратите внимание, что мы не говорим "первый — в родительском" — написание кода, который делает какие-то предположения относительно предопределенного порядка — очень плохая идея.

Каждый из двух возвратов системного вызова fork()имеет разные значения. В родительский процесс этот системный вызов возвращает pid вновь созданного дочернего процесса, а в дочернем он возвращает 0.

Разница возвращаемых значений — это единственное отличие, видимое процессам. Оба имеют одинаковые образы памяти, права доступа, открытые файлы и обработчики сигналов [19] Детальную информацию о том, как родительские и дочерние открытые файлы соотносятся друг с другом, можно найти в главе 11. . Рассмотрим простой пример программы, порождающей дочерний процесс.

#include

#include

#include

int main(void) {

pid_t child;

if (!(child = fork())) {

printf("в дочернем\n");

exit (0);

}

printf("в родительском - дочерний: %d\n", child);

return 0;

}

10.4.2. Наблюдение за уничтожением дочерних процессов

Сбор состояний возврата дочернего процесса называется ожиданиемпроцесса. Это можно делать четырьмя способами, хотя только один из вызовов предоставляется ядром. Остальные три метода реализованы в стандартной библиотеке С. Поскольку системный вызов ядра принимает четыре аргумента, он называется wait4().

pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage);

Первый аргумент, pid, представляет собой процесс, код возврата которого должен быть возвращен. Он может принимать ряд специальных значений.

pid < -1Ожидать завершения любого дочернего процесса, чей pgid равен абсолютному значению pid.

pid = -1Ожидать прерывания любого дочернего процесса.

pid = 0Ожидать завершения дочернего из той же группы процессов, что и текущий [20] Группы процессов рассматриваются далее в этой главе .

pid > 0Ожидать выхода процесса pid.

Второй параметр — это указатель на целое, которое устанавливается в значение, равное соду возврата того процесса, который заставляет wait4()вернуть управление (мы будем зазывать его "проверяемым" процессом). Формат возвращенного состояния довольно закрученный, и для того, чтобы сделать его осмысленным, существует набор макросов.

Три события заставляют wait4()вернуть состояние проверяемого процесса. Процесс может завершиться, он может быть прерван вызовом kill()(получит фатальный сигнал) либо он может быть остановлен по какой-либо причине [21] В главе 15 описаны причины, по которым это может произойти. . Вы можете узнать, что именно случилось, с помощью описанных ниже макросов, каждый из которых принимает возвращаемое состояние wait4()в качестве единственного параметра.

WIFEXITED(status) Возвращает true, если процесс завершился нормально. Процесс завершается нормально, когда его функция main()выходит из программы посредством вызова exit(). Если WIFEXITEDистинно, то WEXITSTATUS(status)возвращает код возврата процесса.
WIFSIGNALED(status) Возвращает true, если процесс был прерван сигналом (это происходит, когда он прерывается вызовом kill()). В этом случае WTERMSIG(status)возвращает номер сигнала, прервавшего процесс.
WIFSTOPPED(status) Если процесс приостановлен сигналом, WIFSTOPPED()возвращает true, a WSTOPSIG(status)возвращает номер сигнала, приостановившего процесс. wait4()возвращает информацию только о приостановленных процессах, если указана опция WUNTRACED.

Аргумент optionsуправляет поведением вызова. WHOHANGзаставляет функцию немедленно вернуть управление. Если в данный момент нет ни одного процесса, готового сообщить свое состояние, то возвращается 0 вместо допустимого pid. WUNTRACEDзаставляет wait4()возвратить соответствующий остановленный дочерний процесс. Более подробно о приостановленных процессах рассказывается в главе 15. Оба флажка могут быть объединены вместе битовой операцией "или".

Финальный параметр wait4(), указатель на struct rusage, наполняется информацией об использовании ресурсов проверяемым процессом и всеми его потомками. Более подробная информация об этом давалась при обсуждении getrusage()и RUSAGE_BOTHранее в главе. Если этот параметр равен NULL, информация о состоянии не возвращается.

Существуют три других интерфейса к wait4(), каждый из которых представляет подмножество его функциональности.

pid_t wait(int *status) Единственный параметр wait()— это указатель на место, куда следует поместить код возврата прерванного процесса. Эта функция всегда блокирует выполнение до тех пор, пока дочерний процесс не будет прерван.
pid_t waitpid (pid_t pid, int *status, int options) Функция waitpid()подобна wait4(). Единственное отличие в том, что она не возвращает информации об использовании ресурсов прерванным процессом.
pid_t wait3(int *status, int options, struct rusage *rusage) Эта функция также подобна wait4(), но не позволяет специфицировать дочерний процесс, который должен быть проверен.

10.4.3. Запуск новых программ

Хотя доступно целых шесть способов запустить одну программу из другой, все они делают почти одно и то же — заменяют текущую выполняющуюся программу другой программой. Обратите внимание на слово " заменяет " — все следы текущей выполняющейся программы при этом исчезают. Если вы хотите оставить исходную программу работающей, вы должны создать новый процесс вызовом fork(), а затем запустить новую программу из дочернего процесса.

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

Интервал:

Закладка:

Сделать


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

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




Разработка приложений в среде Linux. Второе издание отзывы


Отзывы читателей о книге Разработка приложений в среде Linux. Второе издание, автор: Майкл Джонсон. Читайте комментарии и мнения людей о произведении.


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

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