В чем разница между open и sysopen в Perl? - PullRequest
9 голосов
/ 20 сентября 2011

Кажется, что оба делают одно и то же, а?

Может кто-нибудь показать мне пример, где они выполняют разную работу?

Ответы [ 2 ]

18 голосов
/ 20 сентября 2011

sysopen - это тонкая оболочка для системного вызова ядра open(2) (аргументы соответствуют напрямую), тогда как open - это оболочка более высокого уровня, которая позволяет выполнять перенаправления, конвейерную передачу и т. Д.

Если вы не работаете с конкретным устройством, которое требует, чтобы некоторые специальные флаги передавались в open(2) раз, для обычных файлов на диске вам должно подойти open.

12 голосов
/ 20 сентября 2011

Цитировать perlopentut :

Если вы хотите удобство оболочки, то открытое в Perl, безусловно, путь.С другой стороны, если вам нужна более высокая точность, чем в упрощенном fopen C (3S), вам следует обратиться к sysopen Perl, который является прямым подключением к системному вызову open (2).Это означает, что это немного сложнее, но это цена точности.

Поскольку Perl написан на C, оба метода, вероятно, в конечном итоге совершат системный вызов open(2).Разница в том, что open() в Perl имеет некоторые тонкости, которые делают открытие , трубопровод и перенаправление очень очень просто.В то же время, open() отнимает некоторую гибкость.Он не обладает ни одной из функций Fcntl, доступных в sysopen(), а также не имеет функции маскирования.

В большинстве ситуаций просто требуется open().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...