How read/write into a named pipe in perl?

假如想象 提交于 2019-12-25 02:14:39

问题


I have a script which have their input/output plugged to named pipes. I try to write something to the first named pipe and to read the result from the second named pipe but nothing happen.

I used open then open2 then sysopen whithout success :

sysopen(FH, "/home/Moses/enfr_kiid5/pipe_CGI_Uniform", O_RDWR);
sysopen(FH2, "/home/Moses/enfr_kiid5/pipe_Detoken_CGI", O_RDWR);
print FH "test 4242 test 4242" or die "error print";

doesn't made error but didn't work : i can't see trace of the print, the test sentence is not write into the first named pipe and try to read from the second block the process.


回答1:


Works here.

$ mkfifo pipe
$ cat pipe &
$ perl -e 'open my $f, ">", "pipe"; print $f "test\n"'
test
$ rm pipe

You don't really need fancy sysopen stuff, named pipes are really supposed to behave like regular files, albeit half-duplex. Which happens to be a difference between your code and mine, worth investigating if you really need this opening pattern.




回答2:


You may need to unbuffer your output after opening the pipe:

sysopen(...);
sysopen(...);

$old=select FH;
$|=1;
select $old;

print FH...

And, as friedo says, add a carriage return ("\n") to the end of your print statement!



来源:https://stackoverflow.com/questions/19932143/how-read-write-into-a-named-pipe-in-perl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!