Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以跨平台的方式传递两个Perl CORE::system命令?_Perl_Multithreading_Named Pipes - Fatal编程技术网

如何以跨平台的方式传递两个Perl CORE::system命令?

如何以跨平台的方式传递两个Perl CORE::system命令?,perl,multithreading,named-pipes,Perl,Multithreading,Named Pipes,我正在编写一个System::Wrapper模块来抽象CORE::System和qx操作符。我有一个serial方法,尝试将command1的输出连接到command2的输入。我在使用命名管道方面取得了一些进展,但是POSIX::mkfifo不是跨平台的 以下是我到目前为止的部分内容(底部的run方法基本上调用system): 我的具体问题: 除了POSIX::mkfifo之外,还有跨平台的替代方案吗?Win32命名管道无法工作,因为您无法将其作为常规文件打开,套接字也不能,原因相同 二,。上述

我正在编写一个System::Wrapper模块来抽象
CORE::System
qx
操作符。我有一个
serial
方法,尝试将command1的输出连接到command2的输入。我在使用命名管道方面取得了一些进展,但是
POSIX::mkfifo
不是跨平台的

以下是我到目前为止的部分内容(底部的
run
方法基本上调用
system
):

我的具体问题:

  • 除了POSIX::mkfifo之外,还有跨平台的替代方案吗?Win32命名管道无法工作,因为您无法将其作为常规文件打开,套接字也不能,原因相同

    二,。上述方法不太管用;这两个线程正确生成,但没有任何线程流过管道。我想这可能与管道死锁或输出缓冲有关。让我恼火的是,当我在实际的shell中运行这两个命令时,一切都按预期工作


  • 第2点已解决;
    -p
    fifo文件测试没有测试正确的文件。

    出于兴趣,为什么需要fifo?你不能只设置一个普通的管道(例如,带?)吗?如果你可以使用更强大的支持,为什么还要使用线程呢

    事实上,您可以使用CPAN模块为您完成大部分工作。例如:

    use IPC::Run qw(run);
    run ['perl', '-pe', ''], '<', 'input.txt', '|', ['perl', '-pe', '$_ = reverse $_}'], '>', 'output';
    
    使用IPC::运行qw(运行);
    运行['perl'、'-pe'、'']、''output';
    

    …应该可以在Linux或Windows上正常工作。

    出于兴趣,为什么需要FIFO?你不能只设置一个普通的管道(例如,带?)吗?如果你可以使用更强大的支持,为什么还要使用线程呢

    事实上,您可以使用CPAN模块为您完成大部分工作。例如:

    use IPC::Run qw(run);
    run ['perl', '-pe', ''], '<', 'input.txt', '|', ['perl', '-pe', '$_ = reverse $_}'], '>', 'output';
    
    使用IPC::运行qw(运行);
    运行['perl'、'-pe'、'']、''output';
    

    …应该可以在Linux或Windows上正常工作。

    我不能使用常规管道,也不能使用IPC::Run,因为我不能确定程序是否会将有意义的输出打印到标准输出或从标准输入中读取。有些程序可能需要将输入或输出文件设置为参数,否则将失效。关于
    fork
    threads
    的比较,我的印象是
    fork
    实际上在(比如)windows环境下不那么健壮。但我没有真正的理由在fork上使用线程。我不能使用常规管道,也不能使用IPC::Run,因为我不能确定程序是否会将有意义的输出打印到STDOUT或从STDIN读取。有些程序可能需要将输入或输出文件设置为参数,否则将失效。关于
    fork
    threads
    的比较,我的印象是
    fork
    实际上在(比如)windows环境下不那么健壮。但我没有真正的理由在fork上使用线程。