LINUX.ORG.RU

Реализация open, вписывающаяся в функциональную парадигму?

 , ,


1

3

Товарищи, есть ли для perl какая-либо штатная, либо XS-ная реализация open, которая возвращает значением собственно файловый дескриптор?

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

Понятно, что перловой функцией делается в три буквы:

my %modeName2modeCryptoSymbols=(
 'read' => '<',
 'write' => '>',
 'append' => '>>',
 'edit' => '+<'
...
);
sub fopen ($$) { open my $fh, $modeName2modeCryptoSymbols{$_[1]}, $_[0]; $fh }

Но нет ли сишной готовой реализации? Просто встроенный оператор open в традиционном перловом виде - это какое-то «привет BASIC'у образца 80-х», потому что современный BASIC уже давно так не делает...

★★★★★

Последнее исправление: DRVTiny (всего исправлений: 1)

Есть же fileno(), не ?
Но если очень хочется, можешь дернуть напрямую syscall/sysopen.

joy4eg ★★★★★
()
Последнее исправление: joy4eg (всего исправлений: 1)
Ответ на: комментарий от Olegymous

Внутри конечно всё равно sysopen и даже проверки регулярными выражениями. Очень удивил open внутри open.

DRVTiny ★★★★★
() автор топика

Твоя функция не поддерживает пайпы, поэтому не нужна. А open рулит

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.