Pipe() системный вызов
Я изучаю трубопровод и оболочку в классе систем. Я возиться с strace
, Я запускаю его на какой-то программе под названием dpipe
,
в strace
журнал, я вижу следующее:
pipe([3, 4])
pipe([5, 6])
Что представляют собой эти целые числа? Я в соответствии с этим трубопроводом в основном используется в оболочке для маршрутизации вывода одной команды, на ввод другой, используя |
, Так что это просто делает нашу жизнь проще. В этом случае, что представляет собой массив чисел? Кроме того, если piping
просто используется в оболочке, почему для этого существует системный вызов C? Это сделано исключительно для тех, кто хочет написать свою собственную оболочку (чтобы облегчить свою жизнь)?
3 ответа
Игнасио правильно объяснил, что числа в квадратных скобках - это два файловых дескриптора, возвращаемых pipe()
системный вызов. Первый - конец чтения канала, а второй - запись канала.
Трубы отнюдь не используются только оболочкой, хотя это, пожалуй, наиболее распространенное место для их использования. Тем не менее, у вас есть это задом наперед; оболочка может использовать только системные вызовы, предоставляемые системой, и потому что система обеспечивает pipe()
Оболочка способна обеспечить обвязку. Без поддержки o / s в форме системного вызова оболочка вряд ли предоставит нотацию канала. Все системные вызовы предназначены для того, чтобы программисты могли предоставлять услуги своим клиентам (конечным пользователям программного обеспечения, которое они пишут).
Это дескрипторы файлов, возвращаемые pipe(2,3p)
, Увидеть pipe(2)
Страница man для более подробной информации.
Это дескрипторы файлов. И трубопровод не только используется в оболочке. Трубопровод может быть выполнен любой программой, и это является основным способом обмена информацией в Unix. Это не что-то особенное для оболочки. Оболочка - это обычный процесс, который позволяет пользователю легко запускать другие процессы.