perl: sysread для дескриптора файла в памяти? - PullRequest
4 голосов
/ 22 августа 2011

Это, к сожалению, не работает:

my $input = "this is a test";
open(my $fh, "<", \$input);
my $n = sysread($fh, $buf, 4);  # want $n == 4, $buf eq 'this'

Замена sysread на read работает как положено.

Ожидается ли это?Можно ли заставить его работать?Я что-то упустил?

Ответы [ 2 ]

5 голосов
/ 22 августа 2011

После sysread, делает переменную $! содержать "Плохой дескриптор файла"? Тогда вы можете столкнуться с ошибкой 72428 «sysread не работает с дескриптором файла для скаляра» (https://rt.perl.org/rt3/Public/Bug/Display.html?id=72428)

1 голос
/ 22 августа 2011

Это работает, однако, я не совсем уверен, почему или если вы действительно хотите сделать это.

my $input = "this is a test";
open(my $fh,'-|',"echo $a");  # open a pipe instead and echo the string
my $n = sysread($fh,$buf,4) or warn $!; 

Обратите внимание, что при сбое sysread устанавливается $!, поэтому вы можете проверить ошибки.

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