问题标签 [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 投票
3 回答
12801 浏览

linux - Bash 管道处理

有谁知道 bash 如何处理通过管道发送数据?

此命令是否将 file.txt 的所有内容打印到缓冲区中,然后由 tail 读取?还是这个命令,比如说,逐行打印 file.txt 的内容,然后在每一行暂停以便 tail 处理,然后要求更多数据?

我问的原因是我正在嵌入式设备上编写一个程序,该程序基本上对一些数据块执行一系列操作,其中一个操作的输出作为下一个操作的输入发送。我想知道linux(bash)是如何处理这个问题的,所以请给我一个一般性的答案,而不是当我运行“cat file.txt | tail -20”时会发生什么。

编辑:Shog9 指出了一篇相关的 Wikipedia 文章,这并没有直接引导我找到这篇文章,但它帮助我找到了这个:http ://en.wikipedia.org/wiki/Pipeline_%28Unix%29#Implementation确实有我正在寻找的信息。


我很抱歉没有说清楚。当然,您正在使用管道,当然您正在使用命令各个部分的标准输入和标准输出。我以为这太明显了,无法说明。

我要问的是如何处理/实施。既然两个程序都不能同时运行,那么数据是如何从标准输入发送到标准输出的呢?如果第一个程序生成数据的速度明显快于第二个程序会怎样?系统是否只运行第一个命令直到它被终止或者它的标准输出缓冲区已满,然后继续执行下一个程序,等等循环直到没有更多数据需要处理或者是否有更复杂的机制?

0 投票
3 回答
13174 浏览

java - Starting a process with inherited stdin/stdout/stderr in Java 6

If I start a process via Java's ProcessBuilder class, I have full access to that process's standard in, standard out, and standard error streams as Java InputStreams and OutputStreams. However, I can't find a way to seamlessly connect those streams to System.in, System.out, and System.err.

It's possible to use redirectErrorStream() to get a single InputStream that contains the subprocess's standard out and standard error, and just loop through that and send it through my standard out—but I can't find a way to do that and let the user type into the process, as he or she could if I used the C system() call.

This appears to be possible in Java SE 7 when it comes out—I'm just wondering if there's a workaround now. Bonus points if the result of isatty() in the child process carries through the redirection.

0 投票
3 回答
10705 浏览

winapi - 匿名管道上的重叠 I/O

是否可以将重叠 I/O 与匿名管道一起使用?CreatePipe() 没有任何指定 FILE_FLAG_OVERLAPPED 的方法,所以我假设 ReadFile() 会阻塞,即使我提供了一个 OVERLAPPED 结构。

0 投票
6 回答
30258 浏览

windows - 如何使用 Unix(或 Windows)中的(最好是未命名的)管道将一个进程的标准输出发送到多个进程?

我想将进程 proc1 的标准输出重定向到两个进程 proc2 和 proc3:

我试过

但它似乎不起作用,即

到标准输出而不是

0 投票
11 回答
25828 浏览

linux - 将管道输入转储到文件的简单方法是什么?(Linux)

我正在寻找一个小的 shell 脚本,它将把任何东西通过管道输入,并将其转储到一个文件中......用于电子邮件调试目的。有任何想法吗?

0 投票
7 回答
103675 浏览

bash - Bash 变量范围

请向我解释为什么最后一个echo语句是空白的?我希望XCODE在 while 循环中将其增加到 1 的值:

我尝试使用以下语句而不是++XCODE方法

它也不会在 while 语句之外打印。我想我在这里遗漏了一些关于变量范围的东西,但是 ol' 手册页没有向我展示。

0 投票
3 回答
257 浏览

java - 为什么“管道” CharBuffer 挂起?

为什么以下方法会挂起?

0 投票
3 回答
2424 浏览

java - “管道”的 Java 习语

是否有比以下更简洁/标准的习语(例如,JDK 方法)用于将输入“管道”到 Java 中的输出?

[编辑] 请注意Readerand Writerare given。正确答案将演示如何采用inout形成管道(最好不超过 1 或 2 个方法调用)。我会接受答案 where inand outare an InputStreamand an OutputStream(最好是从/到Reader/的转换Writer)。in如果orout是/或/的子类,我将不接受答案。ReaderInputStreamWriterOutputStrem

0 投票
8 回答
7992 浏览

unix - 在 shell/bash 中连接两个命令之间的输入 _and_output

我有两个(UNIX)程序 A 和 B,它们从 stdin/stdout 读取和写入。

我的第一个问题是如何将 A 的标准输出连接到 B 的标准输入,将 B 的标准输出连接Aie 的标准输入,例如 A | B 而是双向管道。我怀疑我可以通过使用 exec 重定向来解决这个问题,但我无法让它工作。这些程序是交互式的,因此临时文件不起作用。

第二个问题是我想复制每个方向并通过日志程序将副本传输到标准输出,以便我可以看到程序之间传递的(基于文本行的)流量。在这里,如果我能解决第一个问题,我可能会逃脱 tee >(...) 。

这两个问题似乎都应该有众所周知的解决方案,但我找不到任何东西。

我更喜欢 POSIX shell 解决方案,或者至少在 cygwin 上的 bash 中工作的东西。

感谢您的回答,我想出了以下解决方案。A/B 命令使用 nc 监听两个端口。日志记录程序使用 sed(使用 -u 进行无缓冲处理)。

这会监听到端口 47001 和 47002 的连接,并将所有流量回显到标准输出。

在外壳 2 中:

在外壳 3 中:

现在在 shell 2 中输入的行将被写入 shell 3,反之亦然,流量记录到 shell 1,如下所示:

以上已在 Cygwin 上测试过

更新:上面的脚本在几天后停止工作(!)。显然它可以死锁。答案中的一些建议可能更可靠。

0 投票
10 回答
208114 浏览

sql-server - 什么是命名管道?

它们是什么以及它们是如何工作的?

上下文恰好是 SQL Server