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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

В более старых версиях библиотеки С системы Linux создавался файл с режимом 0666 (общедоступное чтение/запись) и в зависимости от umask программы приобретались соответствующие права на файл. В более новых версиях читать и записывать в файл разрешено только текущему пользователю, но поскольку POSIX не определяет такое поведение, неплохо явно установить umask процесса (077 — хороший выбор!) до вызова mkstemp().

Система Linux и некоторые другие операционные системы предлагают функцию mkdtemp()для создания временных каталогов.

char * mkdtemp(char * template);

Параметр templateработает так же, как и для mkstemp(), за исключением того, что функция возвращает указатель на templateпри успешном завершении работы и NULLв случае неудачи.

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

С временными файлами связана еще одна проблема, которая не рассматривалась до сих пор. Они содержат режимы состязаний, добавляемые временными каталогами, которые постоянно хранятся в сетевых (особенно NFS) файловых системах, а также программами, которые регулярно удаляют старые файлы из этих каталогов. При повторном открытии временных файлов после их создания следует проявлять крайнюю осторожность. Более подробное описание этих и других проблем, связанных с временными файлами, можно найти в книге Давида Вилера Secure Programming for Linux and UNIX HOW TO (http://www.dwheeler.com/secure-programs/). Если вам необходимо реализовать один из таких моментов, возможно, лучше будет создавать временные файлы в домашнем каталоге текущего пользователя.

22.3.6. Режимы состязаний и обработчики сигналов

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

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

• Выполнение динамического распределения памяти. Функции распределения памяти не являются реентерабельными и не должны применяться в обработчиках сигналов.

• Применение каких-либо функций, кроме перечисленных в табл. 12.2, всегда приводит к ошибке. Программы, вызывающие такие функции, как printf(), из обработчика сигналов, содержат режимы состязаний, поскольку printf()имеет внутренние буферы и не является реентерабельной.

• Неправильное блокирование остальных сигналов. Большинство обработчиков сигналов не являются реентерабельными, однако, довольно часто в обработчиках, управляющих несколькими сигналами, не блокируются автоматически остальные сигналы. Применение sigaction()помогает исправить ситуацию (если программист старательный).

• Неблокирование сигналов в тех областях кода, модифицирующих переменные, к которым обработчик сигналов также имеет доступ. (Такие зоны часто называются критическими областями.)

В то время как режимы состязаний, порожденные сигналами, могут показаться не опасными, сетевые коды, setuid- и setgid-программы могут использовать сигналы, посылаемые ненадежными пользователями. Передача экстренных данных в программу может стать причиной отправки SIGURG, в то время как setuid- и setgid-программы могут принимать сигналы от пользователя, который запускает их, при этом фактические универсальные имена данных процессов не изменяются. Даже если эти программы изменяют свои действительные имена для предупреждения передачи сигналов, при закрытии пользователем терминала все программы, использующие этот терминал, посылают SIGHUP.

22.3.7. Закрытие файловых дескрипторов

В системах Linux и Unix файловые дескрипторы, как правило, наследуются через системные вызовы exec()(и всегда наследуются через fork()и vfork()). В большинстве случаев такое поведение нежелательно, поскольку только разделяться должны только stdin, stdout и stderr. Программы, запускаемые привилегированным процессом, не должны иметь доступа к файлам через унаследованный файловый дескриптор. Поэтому очень важно, чтобы программы внимательно закрывали все файловые дескрипторы, к которым не должна получить доступ новая программа. Это может стать проблемой, если ваша программа вызывает библиотечные функции, которые открывают файлы и не закрывают их. Одним из методов закрытия файловых дескрипторов является закрытие всех файловых дескрипторов вслепую из дескриптора номер 3 (тот, который следует сразу за stderr) произвольным большим значением (скажем, 100 или 1024) [165] Система Linux позволяет программам открывать очень большое количество файлов. Процессы, работающие как root, могут одновременно открывать сотни файлов, однако большинство дистрибутивов устанавливают предел ресурсов на количество файлов, который может открывать пользовательский процесс. Этот предел также ограничивает максимальный файловый дескриптор, который можно использовать, с помощью метода dup2() , тем самым, предоставляя удобный верхний предел для закрывающего файлового дескриптора. . В большинстве программ это обеспечивает закрытие всех надлежащих файловых дескрипторов [166] Еще одним способом закрытия всех файлов, открытых программой, является прохождение через каталог файловой системы процесса /proc , в котором перечислены все открытые файлы, и закрытие каждого из них. Каталог /proc/PID/fd (где PID —это pid текущего процесса) содержит символическую ссылку для каждого файлового дескриптора, открытого процессом. Имя каждой символической ссылки представляет собой файловый дескриптор, которому она соответствует. Считывая содержимое каталога, программа легко может закрыть все файловые дескрипторы, которые больше не нужны. .

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

Интервал:

Закладка:

Сделать

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

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


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

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

x