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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать

163

К сожалению, функция clearenv() не очень хорошо стандартизирована. Она входит в последние версии POSIX, однако она была выброшена из стандарта Single Unix Standard и не доступна во всех системах типа Unix. Если вам необходимо поддерживать операционную систему, не включающую эту переменную, установите environ=NULL;.

164

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

165

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

166

Еще одним способом закрытия всех файлов, открытых программой, является прохождение через каталог файловой системы процесса /proc, в котором перечислены все открытые файлы, и закрытие каждого из них. Каталог /proc/PID/fd (где PID —это pid текущего процесса) содержит символическую ссылку для каждого файлового дескриптора, открытого процессом. Имя каждой символической ссылки представляет собой файловый дескриптор, которому она соответствует. Считывая содержимое каталога, программа легко может закрыть все файловые дескрипторы, которые больше не нужны.

167

Один из авторов этой книги разработал набор инструментальных средств newt для управления окнами на высоком уровне на основе S-Lang; этот набор входит в состав большинства распространяемых дистрибутивов Linux.

168

Как это описано в базе данных terminfo.

169

Ошибка возникает, если получение сигнала происходит в тот момент, когда S-Lang ожидает нажатие клавиши.

170

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

171

Со временем эта цифра может возрасти, однако маловероятно, что это когда-нибудь будет необходимо.

172

В частности, в некоторых системах это может привести к мерцанию текста.

173

Библиотека Berkley db была существенно расширена, и сейчас включает реализацию B-деревьев и весь спектр работы с транзакциями.

174

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

175

Инвертированные индексы представляют собой структуры данных, предназначенные для полнотекстового поиска.

176

В отличие от некоторых библиотек баз данных, использующих множество файлов с расширениями .pag и .dir, библиотека Depot использует один файл.

177

Хорошее описание хеш-таблиц можно найти в [11].

178

Это значение можно изменить только путем оптимизации базы данных с помощью функции dpoptimize(), описание которой можно найти на Web-сайте qdbm.

179

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

180

Вернее, они возвращаются в том порядке, в котором производятся ссылки на элементы из хеш-области. Хотя это и есть порядок, он является совершенно бесполезным.

181

Библиотека glibc также предлагает библиотеку argp, с помощью которой можно осуществлять альтернативный вариант проверки синтаксиса параметров.

182

Те, кто знаком с функцией getopt(), заметят, что argInfo является единственным обязательным членом структуры struct poptOption, который отличается от члена в таблице аргументов getoptlong(). Благодаря этому сходству существенно упрощается переход от getoptlong() к popt.

183

Полный исходный код для данного примера можно найти в главе 23.

184

Распространенной ошибкой является определение массива argv как char **, а не как const char **, что является правильным вариантом. Благодаря прототипу функции poptGetContext() компилятор генерирует предупреждающее сообщение, если массив argv будет определен неправильно.

185

Он также добавляет параметр -?, который соответствует --help.

186

Макрос POPT_AUTOHELP расширяется для включения вложенной таблицы параметров, определяющей новые параметры и обратный вызов, при котором реализуются эти параметры.

187

Часто в подобных случаях удобно использовать POPT_CONTEXT_KEEP_FIRST.

188

Первоначально библиотека popt была реализована для RPM, и многие параметры запросов RPM реализованы в виде простых макросов popt.

На этой странице вы можете бесплатно читать книгу Разработка приложений в среде Linux. Второе издание - Майкл Джонсон бесплатно.
Похожие на Разработка приложений в среде Linux. Второе издание - Майкл Джонсон книги

Оставить комментарий