Выполнение команды
В блоке выполнения программы мы должны определить,
какой тип команды мы собираемся выполнять (встроенную,
или внешнюю). Разница заключается в том, что встроенные ко-
манды выполняются основном процессе командной оболочки,
а внешние необходимо выполнять в дочернем процессе. Это
связано с особенностью работы системного вызова exec: в UNIX
системах новая программа полностью запускается в вызыва-
ющем процессе, и, после окончания выполнения, завершается
вместе с вызвавшим его процессом.
Чтобы выполнить другую программу, не закрывая ко-
мандную оболочку, необходимо создать копию процесса ко-
мандной оболочки (системный вызов fork), и в дочернем
процессе запустить необходимую команду. Блок-схема подпро-
граммы execute command представлена на рисунке 2.
После выполнения fork, основной (родительский) процесс
начинает выполняться одновременно с дочерним. Родитель-
ский процесс ждет (wait pid), пока выполнится дочерний. Это
необходимо, чтобы затем сообщить пользователю код завер-
шения выполняемой программы.
Подпрограмма dup file descriptor выполняет подмену фай-
ловых дескрипторов. Файловый дескриптор простыми сло-
вами — это описатель потока ввода-вывода, т. е. сущность,
благодаря которой мы можем передавать данные между про-
цессами, и даже выводить их на экран для пользователя (ис-
пользуя стандартные файловые дескрипторы stdin, stdout,
stderr). Подмена необходима для тех случаев, когда процессу не-
обходимо считать данные из конвейера или записать их в него.
“Young Scientist” . # 52 (342) . December 2020
25
Information Technology
Рис.
1. Основной цикл программы
Рис.
2. Подпрограмма execute command
«Молодой учёный» . № 52 (342) . Декабрь 2020 г.
Достарыңызбен бөлісу: |