问题标签 [pipe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1978 浏览

windows - 如何让分叉管道在 Windows 上的 Perl 中工作?

我正在尝试将 Perl 脚本从 Unix 移植到 Windows,但由于 open 函数中不支持分叉管道,我几乎不可能有时间让它工作。这是代码:

错误是:

有谁知道如何使这项工作?谢谢!

麦克风

0 投票
2 回答
1245 浏览

unix - 如何从 Solaris 的命令行创建非阻塞管道?

我正在尝试编写一个从其他进程读取输入并对其进行分析的 lua 脚本。为此,我正在使用 io.popen 并且它在 Windows 中按预期工作,但在 Unix(Solaris)上从 io.popen 块读取,所以脚本只是在那里等待直到出现某些东西而不是立即返回......

据我所知,我无法从脚本中更改 io.popen 的功能,如果可能的话,我宁愿不必更改 C 代码,因为那样脚本将需要与修补后的绑定二进制。

这会给我留下任何命令行解决方案吗?

0 投票
4 回答
1082 浏览

linux - *NIX 中的命令管道如何工作?

当我这样做时:

进程findgrep是一起产生的吗?我的猜测是肯定的。如果是这样,那么这是如何工作的?:

如果yes不断向标准输出发送“y”并command_that_prompts_for_confirmations在读取标准输入时读取“y”,如何yes知道何时终止?因为如果我yes单独运行而不将其输出传递给其他命令,它永远不会结束。

但是,如果管道命令不会同时产生所有进程,那么如何yes知道要输出多少个 'y'?这对我来说是第 22 条规则。有人可以解释一下这个管道在 *NIX 中是如何工作的吗?

0 投票
1 回答
6538 浏览

c - 在 C 中使用管道进行父子 IPC 会导致程序阻塞

我正在编写一个服务器,当它接受套接字连接时,fork() 会关闭子进程。

当孩子与客户沟通时,它必须将一些信息发送回父母。我正在使用管道来完成此操作。

问题是,当我尝试执行父子 IPC 时,父在读取子输入时会阻塞。这意味着,即使子进程同时运行,它们也只能一次处理一个,因为它们都在等待父进程。

我的代码看起来像这样(为简洁起见,删除了错误检查):

所以我的问题是,我该如何解决这个问题?我怎样才能让父母使用管道与孩子进行交流,而不会阻塞?

这甚至可以通过管道实现,还是我应该使用共享内存(我猜是信号量)或消息队列?(我读过这篇文章:比较 Unix/Linux IPC,但很难找到这些任务是如何实际完成的示例。)

更多细节:

我有一个执行以下操作的测试程序: 1. 连接到服务器 2. Sleep(5) 3. 断开与服务器的连接

当我运行该程序的 2 个实例时,服务器会输出以下内容:

显然一次处理每个客户。

当我删除 IPC - 当我从父子节点中删除管道 read() 和 write() 时,我得到了这个:

这就是我想要的!

关于我如何做到这一点的任何想法?(或者我应该在解决这个问题的方式上做出改变?)

(编辑:这是网络课程作业的一部分。我们正在实现一个 P2P 协议,该协议使用中央服务器来管理对等点。我们可以使用任何语言,我想我会在 C 中试一试。)

0 投票
4 回答
4293 浏览

unix - sed 阻塞了吗?

我的印象 sed 没有阻塞,因为当我说:

sed在数据到达时处理数据,但是当我这样做时

然后sednetcat

我对吗?

0 投票
5 回答
2221 浏览

c# - C# 将文本/数据流式传输到 zip/gpg 而不是向应用程序传递文件名?

我目前有一个用 C# 编写的应用程序,它可以获取文件并使用 gpg.exe 对其进行加密

我要做的是,而不是 1. 创建文件(通常来自数据库查询) 2. 加密文件 3. 删除未加密的文件

我想要

  1. 将信息收集到内存中(到字典或列表或其他任何东西中)
  2. 将文本/数据流式传输到 gpg.exe 以输出加密文件

我已经研究了 pipestream,将标准输入重定向到 gpg 进程等,但我还没有找到一种方法来欺骗 gpg.exe 接受流式传输的文本/数据而不是硬盘驱动器上的文件。

最初想如果我可以为 gpg 做,我也可以为 Zip 做,但我想知道这是否可能。找到了一些似乎与 php 相关的 popen 参考,但与 c# 无关。

本质上,我希望以编程方式执行以下操作,其中 text.txt 是内存中流式传输到应用程序的内容,而不是硬盘驱动器上的实际文件。

C:\Program Files\GNU\GnuPG>类型 C:\test.txt | zip > plubber.zip C:\Program Files\GNU\GnuPG>类型 C:\test.txt | gpg -er "mycomp_operations" > Test.pgp

感谢您提供的任何帮助:)

托尼!

0 投票
6 回答
2731 浏览

python - Python单行打印当前目录中的每个文件

如何通过 Python 使以下一行打印每个文件?

具体想知道如何通过管道输入python -c。接受 DOS 或 Cygwin 响应。

0 投票
1 回答
433 浏览

shell - 如何将命令的输出捕获到 Bourne shell 中的文件描述符?

在 Bourne shell 中捕获命令输出的标准方法是使用以下$()语法:

但是,对于具有大量输出的命令,这需要 shell 将整个内容作为一个长字符串分配内存。我更愿意找到与 Unix C 函数在道德上等效的东西popen,以获取我可以从中获取的新文件描述符read

这甚至可能吗?

0 投票
2 回答
930 浏览

winapi - Win32:判断stdout句柄是char还是wchar流

我正在为我们的产品编写一个 win32 实用程序函数,该函数需要通过 shell 调用任意程序并记录其输出。我们通过将标准输出从子进程重定向到管道来做到这一点:

可以这样调用的程序种类繁多,其中许多不在我们的控制之下。目前我们看到一个问题,许多程序的输出在第一个字符之后似乎被截断——通常是一个确定的信号,表明 WCHAR 字符串被错误地用作 CHAR。

如何判断子进程是作为 CHAR 还是 WCHAR 写入其 stdout 管道?

0 投票
1 回答
3723 浏览

c - 如何使用 fprintf 并写入管道?

我创建了一个管道,并使用 dup2() 将流 1 和 2(stdout 和 stderr)覆盖到这些管道中。

现在我希望使用 fprintf 写入流 1 或 2,但我的程序似乎没有在管道的另一侧接收任何内容。我试过使用 printf(),但我不确定这是否默认写入标准输出或流 1。如果它写入流 1,我猜它是我代码中某个更深的地方的问题。

本质上我是在问,给定一个表示流的 int,我怎样才能获得适合在 fprintf() 中使用的 FILE*?