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

Здесь есть возможность читать онлайн «Майкл Джонсон - Разработка приложений в среде Linux. Второе издание» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: Вильямс, Жанр: ОС и Сети, Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

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

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Разработка приложений в среде Linux. Второе издание»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

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

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Разработка приложений в среде Linux. Второе издание», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Пример применения socketpair()показан далее в главе.

17.4.6. Передача файловых дескрипторов

Сокеты домена Unix обладают уникальным свойством: через них могут передаваться файловые дескрипторы. Ни один из прочих механизмов IPC не поддерживает подобную возможность. Она позволяет процессу открыть файл и передать файловый дескриптор в другой (возможно, несвязанный) процесс. Все проверки доступа выполняются при открытии файла, поэтому получающий процесс приобретает те же самые права доступа к файлу, что и исходный процесс.

Файловые дескрипторы передаются как часть более сложного сообщения, которое отправляется с помощью системного вызова sendmsg()и принимается через recvmsg().

#include

int sendmsg(int fd, const struct msghdr * msg, unsigned int flags);

int recvmsg(int fd, struct msghdr * msg, unsigned int flags);

Параметр fdявляется файловым дескриптором, через который передается сообщение; второй параметр служит указателем на структуру, описывающую сообщение. Параметр flagsобычно не используется и для большинства приложений должен быть равен нулю. В специализированных книгах по программированию для сетей обсуждаются доступные флаги [33].

Сообщение описывается показанной ниже структурой.

#include

#include

struct msghdr {

void * msg_name; /* дополнительный адрес */

unsigned int msg_namelen; /* размер msg_name */

struct iovec * msg_iov; /* массив для чтения вразброс/сборной записи*/

unsigned int msg_iovlen; /* количество элементов в msg_iov */

void * msg_control; /* вспомогательные данные */

unsigned int msg_controllen;/* длина буфера вспомогательных данных */

int msg_flags; /* флаги на получаемом сообщении */

};

Первые два члена msg_nameи msg_namelenне используются в потоковых протоколах. Приложения, посылающие сообщения через потоковые сокеты, должны устанавливать для msg_nameзначение NULL, для msg_namelen— ноль.

msg_iovи msg_iovlenописывают набор буферов, которые отправляют или принимают. Чтение вразброс и сборная запись, а также struct iovec, обсуждаются в конце главы 13. Последний член структуры msg_flagsв настоящее время не используется и должен равняться нулю.

Два элемента, которые мы пропустили, msg_controlи msg_controllenпредоставляют возможность передачи файлового дескриптора. Член msg_controlуказывает на массив заголовков управляющих сообщений; msg_controllenустанавливает количество байт, которые содержит массив. Каждое управляющее сообщение состоит из структуры struct cmsghdr, которая сопровождается дополнительными данными.

#include

struct cmsghdr {

unsigned int cmsg_len; /* длина управляющего сообщения */

int cmsg_level; /* SOL_SOCKET */

int cmsg_type; /* SCM_RIGHTS */

int cmsg_data[0]; /* здесь должен быть файловый дескриптор */

};

Размер управляющего сообщения, включая заголовок, хранится в переменной cmsg_len. В текущий момент определен только один тип управляющих сообщений — SCM_RIGHTS, который передает файловые дескрипторы [125] Это иногда называется передачей прав доступа. . Для данного типа сообщений параметры cmsg_levelи cmsg_type должны быть равны соответственно SOL_SOCKETи SCM_RIGHTS. Последний член cmsg_dataявляется массивом нулевого размера. Это расширение gcc, которое позволяет приложению копировать данные в конец структуры (в следующей программе показан пример).

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

Для иллюстрации использования таких вложенных структур мы написали пример программы, которая по нашей прихоти названа просто cat. Она принимает имя файла в качестве единственного аргумента, открывает указанный файл в дочернем процессе и передает результирующий файловый дескриптор в родительский процесс через сокет домена Unix. Родительский процесс затем копирует файл на стандартный вывод. Имя файла посылается вместе с файловым дескриптором с демонстрационной целью.

1: /* passfd.с */

2:

3: /* Программа ведет себя подобно обычной команде /bin/cat, которая обрабатывает

4: только один аргумент (имя файла). Мы создаем сокеты домена Unix при помощи

5: socketpair(), затем разветвляем через fork(). Дочерний процесс открывает файл,

6: имя которого передается в командной строке, пересылает файловый дескриптор и

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

Интервал:

Закладка:

Сделать

Похожие книги на «Разработка приложений в среде Linux. Второе издание»

Представляем Вашему вниманию похожие книги на «Разработка приложений в среде Linux. Второе издание» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Геше Джампа Тинлей - Лоджонг (второе издание)
Геше Джампа Тинлей
Алексей Филатов - Люди «А». Второе издание
Алексей Филатов
Отзывы о книге «Разработка приложений в среде Linux. Второе издание»

Обсуждение, отзывы о книге «Разработка приложений в среде Linux. Второе издание» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x