2012-02-21 8 views
1

Я узнаю о трубопроводах и оболочке в классе Systems. Я возился с strace. Я запускаю его в некоторой программе под названием dpipe.Труба() Системный вызов

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

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

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

ответ

1

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

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

+0

Даже без поддержки системного вызова или многозадачности труб можно реализовать подобную трубу семантику. DOS command.com делает это, перенаправляя вывод одной команды в файл сначала перед началом второй команды. (Это, конечно, имеет последствия и определенные ограничения ..) –

3

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

1

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

Смежные вопросы