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

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

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

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

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

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

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

shell (включая bash, которвА по умолчанию установлен в большинстве
дистрибутивов Linux) вто делается таю
% program > output_file.txt 2>Ы
% program 2>&1 | filter
Запись 2>&1 означает, что файл с дескриптором 2 (stderr) объединяется с
файла, имеющим дескриптор 1 (stdout). Обратите внимание на то, что эта
запись должна нжп после операции перенаправления в файл (первый пример),
но перед операцией n*'f>*^" правления в канал (второй пример).
34 Часть I. Сложные вопросы программирования в среде UNlX/linux
Поток stdout является буферизуемым. Записываемые в него данные не
посылаются на консоль (или на другое устройство в случае
перенаправления), пока буфер не заполнится, программа не завершит работу
нормальным способом или файл stdout не будет закрыт. Осуществить
принудительное "выталкивание" буфера позволяет функция f flush (): fflush
(stdout);
В то же время поток stderr не буферизуется. Записываемые в него данные
сразу попадают на консоль.1
Указанная особенность потока stdout может приводить к неожиданным
результатам. Например, в следующем цикле точка не выводится каждую
секунду. Вместо этого все символы сначала помещаются в буфер, а затем
целая их группа одновременно выводится на экран, когда буфер оказывается
заполненным.
while (1) ( printf (".")? sleep (1);
)
А в этом цикле происходит то, что нам нужно:
while (1) {
fprintf (stderr, "."); sleep (1);
)
2.1.5. Коды завершения программы
Когда программа завершает работу, она уведомляет операционную систему о
своем состоянии, посылая ей код завершения, который представляет собой
16-разрядное целое число. По существующему соглашению нулевой код
свидетельствует об успешном завершении, а ненулевой указывает на наличие
ошибки. Некоторые Программы возвращают различные ненулевые коды,
обозначая разные ситуации.
В большинстве интерпретаторов команд код завершения последней выполненной
программы содержится в специальной переменной $?. В показанном ниже
примере программа Is вызывается дважды, и оба раза запрашивается код ее
завершения. В первом случае программа завершается корректно и возвращает
нулевой код, во втором случае она сталкивается с ошибкой (указанный в
командной строке файл не иайден), поэтому код завершения оказывается
ненулевым:
% Is /
bin coda etc lib misc nfs proc sbin usr
boot dev home lost+found mnt opt root tmp var % echo S?
0
% Is bogusfile
Is: bogusfile: No such file or directory % echo S?
1
Программа, написанная на языке С илн C++, указывает код завершения в
операторе return в функции main (). Есть н другие методы задания кодов
завершения. Они обсуждаются в главе 3, "Процессы". Например, программе
назначается определенный код, когда она завершается аварийно (вследствие
получения сигнала).
I В C++ аналогичное различие существует между потоками CCUt и сегг.
Манипулятор endl добавляет в конец потока симва.1 новой строки и вызывает
"выталкивание" буфера. Если состояние буфера временно менять не нужно (из
соображений производительности, например), воспользуйтесь вместо
манипулятора константой '\л'.
Глава 2 Написание качественных программ для среды GNU/Linux 35
2.1.6. Среда выполнения
Операционная система Linux предоставляет каждой запущенной программе
среду выполнение Под средой подразумевается совокупность пар переменная-
значение. Имена переменных среды и их значения являются строками. По
существующему соглашению переменные среды записываются прописными
буквами.
Некоторые переменные должны быть знакомы большинству читателей, например:
¦ USER - содержит имя текущего пользователя;
¦ НОМЕ - содержит путь к начальному каталогу текущего пользователя;
¦ PATH - содержит разделенный двоеточиями список каталогов, которые
операционная система просматривает в поиске вызванной программы;
¦ DISPLAY - содержит имя н номер экрана сервера X Window, на котором
отображаются окна графических программ.
Интерпретатор команд, как и любая другая программа, располагает своей
средой. Имеются средства просмотра и редактирования переменных среды нз
командной строки. Например, программа prmtenv отображает текущую сред>'
интерпретатора. В разных интерпретаторах есть свой встроенный синтаксис
работы с переменными среды. Ниже демонстрируется синтаксис
интерпретаторов семейства Bourne shell.
¦ Интерпретатор автоматически создает локальную переменную
(называемую переменной интерпретатора) для каждой обнаруживаемой им
переменной среды. Благодаря этому возможен доступ к переменным среды
через выражения вида $ переменная. Например:
% echo 5USER samuel
% echo $НОМЕ /home/samuel
¦ С помощью команды export можно экспортировать переменную
интерпретатора в переменную среды. Вот как, например, задается значение
переменной EDITOR:
% EDlTOR=emacs % export EDITOR
Или короче:
% export EDIToR=emacs
В программе доступ к переменным среды осуществляет функция getenv {),
объявленная в файле <stdlib. h>. В качестве аргумента она принимает имя
переменной и возврат щает ее значение в строковом виде или NULL, если
Предыдущая << 1 .. 7 8 9 10 11 12 < 13 > 14 15 16 17 18 19 .. 128 >> Следующая