我有一个脚本,其输入/输出插入命名管道。我尝试将东西写入第一个命名管道,并从第二个命名管道中读取结果,但没有任何反应。
我使用open然后open2然后sysopen没有成功:
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";
没有出错但是没有工作:我看不到打印的痕迹,测试句子没有写入第一个命名管道并尝试从第二个块读取过程。
答案 0 :(得分:1)
在这里工作。
$ mkfifo pipe
$ cat pipe &
$ perl -e 'open my $f, ">", "pipe"; print $f "test\n"'
test
$ rm pipe
你真的不需要花哨的sysopen
东西,命名管道确实应该像普通文件一样,尽管是半双工的。这恰好是你的代码和我的代码之间的区别,值得研究一下你是否真的需要这种开放模式。
答案 1 :(得分:0)
打开管道后,您可能需要取消缓冲输出:
sysopen(...);
sysopen(...);
$old=select FH;
$|=1;
select $old;
print FH...
并且,正如friedo所说,在打印语句的末尾添加回车符(“\ n”)!