Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Программирование для Linux. Профессиональный подход - Митчелл М.

Митчелл М., Оулдем Дж., Самьюал А. Программирование для Linux. Профессиональный подход — М.: Вильямс , 2003. — 288 c.
ISBN 5-8459-0243-6
Скачать (прямая ссылка): programmirovaniedlyalinux2003.djvu
Предыдущая << 1 .. 8 9 10 11 12 13 < 14 > 15 16 17 18 19 20 .. 128 >> Следующая

переменная не определена в данной среде. Для установки и сброса значений
переменных среды предназначены функции setenvO и unsetenv (}
соответственно.
Получить список всех переменных среды немного сложнее. Для этого нужно
обратиться к специальной глобальной переменной environ, определенной в
GNU-библиотеке языка С. Данная переменная имеет тнп char* * и
представляет собой массив указателей на символьные строки, последним
элементом которого является NULL. Каждая строка имеет вид ПЕ РЕМЕННАЯ=зна
че"гие.
Программа, представленная в листинге 2.3, отображает всю свою среду,
просматривая в цикле массив environ.
36 Часть I. Сложные вопросы программирования в среде UNIX/Ltnux
2.3, (print-erw.c) Вывод переменных среды
¦include <stdio.h>
* Массив ENVIRON содержит среду выполнения. */ extern char** environ;
-nt main ()
{
char** var;
for (var = environ; *var != NULL; ++var) prxntf (*%s\n*/ *var); return 0;
}
He пытайтесь модифицировать массив environ самостоятельно. Пользуйтесь
для этих ¦щелей функциями setenv {) и unset env {).
Обычно при запуске программа получает копию среды своей родительской
программы интерпретатора команд, если она была запущена пользователем).
Таким образом, программы, запущенные из командной строки, могут
исследовать среду интерпретатора команд.
Переменные среды чаще всего используют для передачи программам
конфигурацион-(r)ой информации. Предположим, к примеру, что требуется
написать программу, подключающуюся к серверу Internet. Имя сервера может
задаваться в командной строке, но, если "шо меняется нечасто, имеет смысл
определить специальную переменную среды - скажем, ?IRVER_NAME, - которая
будет хранить имя сервера. При отсутствии переменной программа берет имя,
заданное по умолчанию. Интересующая нас часть программы показана
* листинге 2.4.
Листинг 2.4. (r/iaitf) Часть сетевой клиентской программы
¦include <stdio-h>
"include "stdlib.h"
int main ()
<
char* server_name = getenv (PSERVER_NAME"); if (server_neme == NULL)
/* Переменная среды SERVER_NAME не задана. Используем установки по
умолчанию. */ server_name = " server. пту-сощрапу. com';
printf ("accessing server %s\n", server_name);
/* Здесь осуществляется доступ к серверу... */
return 0;
)
Допустим, программа называется client. Если переменная SERVER_NAME не
задана, используется имя сервера, заданное по умолчанию:
% client
accessing server server.my-company.com Вот как задается другой сервер:
% export SERVER_NAME=backup-server.elsewhere.net % client
accessing server backup-server.elsewhere.net
Гпава 2. Написание качественных программ для среды GNU/Linux 37
2.1.7. Временные файлы
Иногда программе требуется создать временный файл, напрнмер для
промежуточного хранения большого объема данных или для передачи данных
другой программе. В системах GNU/Linux временные файлы хранятся в
каталоге /tmp. Работая с временными файлами, необходимо помнить о
следующих ловушках.
¦ Одновременно может быть запущено несколько экземпляров программы
(одним н тем же пользователем или разными пользователями). Все они должны
использовать разные имена временных файлов, чтобы не было конфликтов.
¦ Права доступа к временным файлам должны задаваться таким образом,
чтобы неавторизованные пользователи не могли влиять на работу программы
путем модификации или замены временного файла.
¦ Имена временных файлов должны генерироваться так, чтобы посторонние
пользователи не могли их предугадать. В противном случае хакер может
воспользоваться задержкой между проверкой факта использования данного
имени файла и открытием нового временного файла.
В Linux имеются функции mkstemp {) и tmpf ile {), решающие все
вышеперечисленные проблемы. Выбор между ними делается на основании того,
должен ли временный файл передаваться другой программе н какие функции
ввода-вывода будут применяться при работе с файлом: низкоуровневые (read
{), write {) н т.д.) или потоковые (f open (). ' fprintf () нт.д.).
Функция mkstempO
Функция mkstemp {) генерирует уникальное имя файла на основании
переданного el шаблона, создает временный файл с правами, разрешающими
доступ к нему только для текущего пользователя, и открывает файл в режиме
чтення/записи. Шаблон имени - это строка, оканчивающаяся
последовательностью "ХХХХХХ" (шесть прописных букв "Х*т). Функция mkstemp
() заменяет каждую букву произвольным символом таким образом, чтобы
получилось уникальное имя, и возвращает дескриптор файла. Запись в файл
осуществляется с помощью функций семейства write {).
Временные файлы, создаваемые функцией mkstemp (), не удаляются
автоматически. Ответственность за это возлагается на того, кто запускает
программу. (Программисты должны внимательно следить за удалением
временных файлов, ииаче файловая система /tmp рано или поздно
переполнится, приведя всю систему в нерабочее состояние.) Если файл
создай для внутреннего использования и не предназначен для передачи
другой программе, м окончании работы с ним нужно сразу же вызвать функцию
Предыдущая << 1 .. 8 9 10 11 12 13 < 14 > 15 16 17 18 19 20 .. 128 >> Следующая