Нейл Мэтью - Основы программирования в Linux

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

Нейл Мэтью - Основы программирования в Linux краткое содержание

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

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым.

Для начинающих Linux-программистов

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

Основы программирования в Linux - читать книгу онлайн бесплатно, автор Нейл Мэтью
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Эти функции реализованы, как правило, с использованием execve, хотя нет обязательных требований на этот счет.

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

Передать значение окружению программы может глобальная переменная environ. Другой вариант — дополнительный аргумент в функциях execleи execve, способный передавать строки, используемые как окружение новой программы.

Если вы хотите применить функцию execдля запуска программы ps, можно выбирать любую функцию из семейства exec, как показано в вызовах приведенного далее фрагмента программного кода:

#include

/* Пример списка аргументов */

/* Учтите, что для argv[0] необходимо имя программы */

char *const ps_argv[] = {"ps", "ax", 0};

/* He слишком полезный пример окружения */

char *const ps_envp[] = {"PATH=/bin:/usr/bin", "TERM=console", 0};

/* Возможные вызовы функций exec */

execl("/bin/ps", "ps", "ax", 0);

/* предполагается, что ps в /bin */

execlp("ps", "ps", "ax", 0);

/* предполагается, что /bin в PATH */

execle("/bin/ps", "ps", "ax", 0, ps_envp);

/* передается свое окружение */

execv("/bin/ps", ps_argv);

execvp("ps", ps_argv);

execve("/bin/ps", ps_argv, ps_envp);

А теперь выполните упражнение 11.2.

Упражнение 11.2. Функция execlp

Давайте изменим пример и используем вызов execlp:

#include

#include

#include

int main() {

printf("Running ps with execlp\n");

execlp("ps", "ps", "ax", 0);

printf("Done.\n");

exit(0);

}

Когда вы выполните эту программу, рехес.с, то получите обычный вывод команды ps, но без сообщения Done. Кроме того, обратите внимание на то, что в выводе нет процесса с именем рехес:

$ ./рехес

Running ps with execlp

PID TTY STAT TIME COMMAND

1 ? S 0:03 init [5]

...

1262 pts/1 Ss 0:00 /bin/bash

1273 pts/2 S 0:00 su -

1274 pts/2 S+ 0:00 -bash

1463 pts/1 SN 0:00 oclock

1465 pts/1 S 0:01 emacs Makefile

1514 pts/1 R+ 0:00 ps ax

Как это работает

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

$ ps ax

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

Существует ограничение для общего размера списка аргументов и окружения процесса, запускаемого функциями exec. Оно задается в переменной ARG_MAXи в системах Linux равно 128 Кбайт. В других системах может задаваться меньший предельный размер, что способно порождать проблемы. Стандарт POSIX гласит, что ARG_MAXдолжна быть не менее 4096 байтов.

Функции exec, как правило, не возвращаются в программу до тех пор, пока не возникла ошибка, в этом случае задается переменная errnoи функция execвозвращает -1.

Новые процессы, запущенные exec, наследуют многие свойства исходного процесса. В частности, открытые файловые дескрипторы остаются открытыми в новом процессе, пока не установлен их флаг FD_CLOEXEC(close on exec) (подробную информацию см. в описании системного вызова fcntlв главе 3 ). Любые открытые в исходном процессе потоки каталогов закрываются.

Дублирование образа процесса

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

Создать новый процесс можно с помощью вызова fork. Системный вызов дублирует текущий процесс, создавая новый элемент в таблице процессов с множеством атрибутов, таких же как у текущего процесса. Новый процесс почти идентичен исходному, выполняет тот же программный код, но в своем пространстве данных, окружении и со своими файловыми дескрипторами. В комбинации с функциями execвызов fork— все, что вам нужно для создания новых процессов.

#include

#include

pid_t fork(void);

Как видно из рис. 11.2, вызов forkвозвращает в родительский процесс PID нового дочернего процесса. Новый процесс продолжает выполнение так же, как и исходный, за исключением того, что в дочерний процесс вызов forkвозвращает 0. Это позволяет родительскому и дочернему процессам определить, "кто есть кто".

Рис 112 Если вызов forkзавершается аварийно он возвращает 1 Обычно это - фото 37

Рис. 11.2

Если вызов forkзавершается аварийно, он возвращает -1. Обычно это происходит из-за ограничения числа дочерних процессов, которые может иметь родительский процесс ( CHILD_MAX), в этом случае переменной errnoбудет присвоено значение EAGAIN. Если для элемента таблицы процессов недостаточно места или не хватает виртуальной памяти, переменная errnoполучит значение ENOMEM.

Далее приведен фрагмент типичного программного кода, использующего вызов fork:

pid_t new_pid;

new_pid = fork();

switch(new_pid) {

case -1:

/* Ошибка */

break;

case 0:

/* Мы — дочерний процесс */

break;

default:

/* Мы — родительский процесс */

break;

}

Выполните упражнение 11.3.

Упражнение 11.3. Системный вызов fork

Давайте рассмотрим простой пример fork1.с:

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

Интервал:

Закладка:

Сделать


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

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




Основы программирования в Linux отзывы


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


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

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