0

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

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

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

4

2 回答 2

2

在这里工作。

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

你真的不需要花哨sysopen的东西,命名管道确实应该表现得像普通文件,尽管是半双工的。这恰好是您的代码和我的代码之间的差异,如果您真的需要这种打开模式,则值得研究。

于 2013-11-12T14:55:45.503 回答
0

打开管道后,您可能需要取消缓冲输出:

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

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

print FH...

并且,正如frido所说,在打印语句的末尾添加一个回车符(“\n”)!

于 2013-11-12T14:57:37.233 回答