POSIX: системный вызов Pipe во FreeBSD и Linux - PullRequest
7 голосов
/ 22 марта 2011

В Linux (2.6.35-22-generic) man pipe утверждает, что

pipe () создает канал, однонаправленный канал данных, который можно использовать для межпроцессного взаимодействия. "

В FreeBSD (6.3-RELEASE-p5) man pipe утверждает, что

Системный вызов pipe () создает канал, который является объектом, допускающим двунаправленный поток данных.и выделяет пару файловых дескрипторов. "

Один является однонаправленным, другой - двунаправленным.Я надеюсь, что это не глупый вопрос, но какой метод является стандартным способом сделать это?Они оба POSIX-совместимы?

Чтобы прояснить свои намерения, я потерял несколько баллов на экзамене за то, что верю, что pipe () был одним из способов, и я ищу боеприпасы, чтобы вернуть какие-либо очки; p

Ответы [ 2 ]

4 голосов
/ 22 марта 2011

Сначала я начал комментировать ответ Грега, но мне кажется, что он более точно отвечает на ваш конкретный вопрос:

pipe() s документация в стандарте POSIX прямо заявляет, что рассматриваемое поведение является «неопределенным», то есть pipe() не обязательно должно быть двунаправленным, хотя это не запрещено.Linux однонаправлен, FreeBSD двунаправлен.Оба совместимы, один просто реализует дополнительное поведение, которое не требуется (но не нарушает приложения, созданные для работы на совместимых системах).

Данные могут быть записаны в файловый дескриптор fildes [1] ичитать из файлового дескриптора fildes [0].Чтение в файловом дескрипторе fildes [0] должно осуществлять доступ к данным, записанным в файловый дескриптор fildes [1], в порядке очереди.Не определено, открыт ли файл fildes [0] для записи и открыт ли файл fildes [1] для чтения.

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

3 голосов
/ 22 марта 2011

Справочная страница FreeBSD для pipe достаточно ясна по этому вопросу:

Двунаправленная природа этой реализации каналов не переносима на более старые системы, поэтомуРекомендуется использовать соглашение для использования конечных точек традиционным способом при использовании трубы в одном направлении.

...