如何在perl中读/写命名管道?

时间:2013-11-12 14:41:48

标签: perl file-io named-pipes

我有一个脚本,其输入/输出插入命名管道。我尝试将东西写入第一个命名管道,并从第二个命名管道中读取结果,但没有任何反应。

我使用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";

没有出错但是没有工作:我看不到打印的痕迹,测试句子没有写入第一个命名管道并尝试从第二个块读取过程。

2 个答案:

答案 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”)!