Linux: Полное руководство
Шрифт:
Рис. 25.5. Виджит menubox
25.7. Календарь
Этот виджит позволяет пользователю удобно ввести дату. Работать с ним нужно так:
Листинг 25.8. Календарь
Рис. 25.6. Календарь
25.8. Шкала прогресса
Для информирования пользователя о ходе процесса, например, копирования или обработки файла, целесообразно использовать виджит gauge (шкала прогресса).
Листинг 25.9. Шкала прогресса
Рис. 25.7. Шкала прогресса
Глава 26
Взаимодействие процессов в Linux
26.1. Способы взаимодействия
Процессы, как и люди, могут «общаться» между собой, то есть обмениваться информацией. В главе 3 мы бегло рассмотрели два средства межпроцессного взаимодействия (IPC, Inter-Process Communication);
С давних времен существуют именованные каналы FIFO (First In — First Out) и сетевые гнезда (сокеты). Вместе с конвейерами и сигналами они составляют IPC типа BSD. Компания AT&T вместе с операционной системой System V предложила три новых вида IPC:
♦ семафоры;
♦ разделяемая память;
♦ очереди сообщений.
В операционной системе Linux поддерживаются оба типа IPC — System V и BSD, то есть в Linux мы можем использовать все вышеперечисленные способы IPC.
26.2. Полудуплексные каналы
Напомню, что канал — это способ связи стандартного вывода одного процесса со стандартным вводом другого. Каналы — старожилы UNIX: они появились еще в самых первых версиях UNIX. Полудуплексные каналы позволяют обмениваться информацией только в одном направлении. Если процесс-предок передает информацию со своего стандартного вывода на стандартный ввод потомка — это пример полудуплексного канала.
Что такое перенаправление ввода/вывода и как его использовать из командной строки, вы уже знаете (п. 3.4.6). Сейчас я покажу, как осуществить перенаправление программным путем, то есть без вмешательства пользователя.
Вызов system порождает дочерний процесс, позволяя ему читать данные со стандартного ввода (stdin) и писать на стандартный вывод (stdout). Иногда нам нужно передать данные дочернему процессу или, наоборот, получить информацию от порожденного процесса. Другими словами, мы хотим, чтобы дочерний процесс получал данные не со стандартного ввода, а от родительского процесса или/и выводил информацию не на стандартный вывод, а передавал ее процессу-предку. Ввод/вывод между процессами осуществляется с помощью системного вызова popen. Этот вызов должен быть выполнен ДО вызова fork, чтобы файловые дескрипторы были унаследованы дочерним процессом.
Первый параметр — это название программы, которую мы хотим запустить в дочернем процессе. Второй параметр определяет режим доступа. Установите значение «r», если вам нужно читать вывод дочернего процесса, если же вам нужно передать информацию на стандартный ввод порожденного процесса, установите значение «w». Режима двустороннего обмена не существует.
Вызов popen возвращает указатель FILE* или пустой указатель NULL, если вызов не удался. Так же, как и при работе с обыкновенными файлами, после завершения операции ввода/вывода вы должны закрыть канал вызовом pclose. Во время работы с потоком рекомендую использовать вызов fflush, чтобы предотвратить задержки из-за буферизации.
Теперь несколько простых примеров. Предположим, что нам нужно вывести на стандартный вывод имена всех текстовых файлов, содержащихся в текущем каталоге. Это можно очень просто сделать с помощью вызова system:
Это уж совсем тривиальная задача — мы просто выводим данные, но никак не обрабатываем их. Как получить все имена текстовых файлов и обработать их в программе?
Враг Империи
Фантастика:
боевая фантастика
рейтинг книги
Ловите конский топот. Том 1. Исхода нет, есть только выходы...
15. Одиссей покидает Итаку
Фантастика:
альтернативная история
рейтинг книги
Американский доктор из России, или история успеха
Документальная литература:
биографии и мемуары
рейтинг книги
Все тайны Земли, которые ты должен узнать, прежде чем умрешь
Все тайны Земли
Научно-образовательная:
прочая научная литература
рейтинг книги
Невменяемый колдун
1. Невменяемый колдун
Фантастика:
фэнтези
рейтинг книги
1115 вопросов священнику
Религия и эзотерика:
православие
христианство
религия
прочая религиозная литература
рейтинг книги
Коллонтай. Валькирия и блудница революции
Человек-загадка
Документальная литература:
биографии и мемуары
научпоп
рейтинг книги
Капитал
Научно-образовательная:
философия
политика
рейтинг книги
МИФЫ. Великолепный МИФ (сборник)
Мифология
Фантастика:
юмористическое фэнтези
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 7
7. История Телепата
Фантастика:
аниме
фэнтези
попаданцы
альтернативная история
рейтинг книги
Избранное
Мастера современной прозы
Проза:
современная проза
рейтинг книги
Сумерки божков
1. Романы
Проза:
русская классическая проза
рейтинг книги
Библия Раджниша. Том 2. Книга 2
Религия и эзотерика:
самосовершенствование
эзотерика
рейтинг книги