Pipe () системный вызов - PullRequest
       34

Pipe () системный вызов

1 голос
/ 21 февраля 2012

Я изучаю трубопровод и оболочку в классе систем.Я возиться с strace.Я запускаю его на какой-то программе под названием dpipe.

. В журнале strace я вижу следующее:

pipe([3, 4])
pipe([5, 6])

Что представляют собой эти целые числа?В соответствии с этим, конвейер в основном используется в shell для маршрутизации вывода одной команды на ввод другой, используя |.Так что это просто делает нашу жизнь проще.В этом случае, что представляет собой массив чисел?Кроме того, если piping используется только в оболочке, почему для этого существует системный вызов C?Это сделано исключительно для тех, кто хочет написать свою собственную оболочку (чтобы облегчить свою жизнь)?

Ответы [ 3 ]

3 голосов
/ 21 февраля 2012

Это дескрипторы файлов, возвращаемые pipe(2,3p). Для получения дополнительной информации см. Справочную страницу pipe(2).

1 голос
/ 21 февраля 2012

Игнасио правильно объяснил, что числа в квадратных скобках - это два файловых дескриптора, возвращаемых системным вызовом pipe(). Первый - конец чтения канала, а второй - запись канала.

Трубы отнюдь не используются только оболочкой, хотя это, пожалуй, самое распространенное место для их использования. Тем не менее, у вас есть это задом наперед; оболочка может использовать только системные вызовы, предоставляемые системой, и, поскольку система предоставляет pipe(), оболочка способна обеспечить трубопровод. Без поддержки o / s в форме системного вызова оболочка вряд ли предоставит нотацию канала. Все системные вызовы предназначены для того, чтобы программисты могли предоставлять услуги своим клиентам (конечным пользователям программного обеспечения, которое они пишут).

1 голос
/ 21 февраля 2012

Это дескрипторы файлов. И трубопровод не только используется в оболочке. Трубопровод может быть выполнен любой программой, и это основной способ для процессов обмениваться информацией в Unix. Это не что-то особенное для оболочки. Оболочка - это обычный процесс, позволяющий пользователю легко запускать другие процессы.

...