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

python - 使用 os.pipe 和 os.fork() 问题的 Python 程序

我最近需要编写一个脚本来执行os.fork()以拆分为两个进程。子进程成为服务器进程并使用使用os.pipe()创建的管道将数据传递回父进程。像往常一样,孩子关闭'r'管道的末端,父母关闭管道的'w'末端。我使用os.fdopen将 pipe() 的返回转换为文件对象。

我遇到的问题是:进程成功分叉,孩子成为服务器。一切正常,孩子尽职尽责地将数据写入'w'管道的开放端。不幸的是,管道的父端做了两件奇怪的事情:
A)它阻塞了管道末端的read()操作'r'。其次,除非末端完全关闭
,否则它无法读取放在管道上的任何数据。'w'

我立即认为缓冲是问题并添加了pipe.flush()调用,但这些没有帮助。

谁能解释为什么在写入端完全关闭之前数据不会出现?是否有使read()呼叫非阻塞的策略?

这是我第一个分叉或使用管道的 Python 程序,如果我犯了一个简单的错误,请原谅我。

0 投票
2 回答
128 浏览

unix - 无法将管道更改为普通文件

我有以下文件(上图),它似乎是一个 Unix 管道 替代文本 http://dl.getdropbox.com/u/175564/problemFile.png

如何使管道成为默认文本文件

0 投票
2 回答
1264 浏览

windows - 在 Windows 中区分管道和文件

在 Unix 上,一切都是文件,因此您可以将文件 i/o 函数与管道、文件、套接字等一起使用。但在 Windows 上,您使用的 api 取决于您拥有的 i/o HANDLE 的类型。

我的问题是:给定一个 HANDLE 你如何确定底层类型是什么?例如,我有一个 HANDLE,它可以是真实文件,也可以是命名/匿名管道。我想知道是否可以在这个 HANDLE 上调用 PeekNamedPipe。

0 投票
2 回答
924 浏览

c++ - 如何判断 stderr 是否将输出定向到文件?

有没有办法可以判断 stderr 是输出到 C/C++ 程序中的文件还是终端?我需要根据程序是否被调用来输出不同的错误消息:

。/程序

或喜欢:

./程序 2>> 文件

0 投票
1 回答
2573 浏览

unix - 使用 -c 标志时如何重定向 Dtrace 输出?

运行带有 -C 标志的脚本时,如何仅重定向 Dtrace 的输出?

就像在这种情况下:

注意:我在发布之前找到了我的问题的答案,但我把它放在这里,所以它是 SO 的一部分。

0 投票
2 回答
3690 浏览

python - 有没有办法轮询从 subprocess.Popen 返回的文件句柄?

说我写这个:

现在如果我这样做

我的程序一直等到子进程输出下一行。

有什么魔法我可以做的,p.stdout这样我就可以读取输出(如果有的话),否则就继续?我正在寻找类似的东西Queue.get_nowait()

我知道我可以创建一个阅读线程p.stdout,但假设我不能创建新线程。

0 投票
2 回答
6782 浏览

c - 从 TCP 套接字进行拼接时,Linux 的 splice(2) 是否有效?

我一直在编写一个有趣的小程序,在 Linux 上用 C 语言通过 TCP 传输文件。程序从套接字读取文件并将其写入文件(反之亦然)。我最初使用读/写并且程序运行正常,但后来我了解了拼接并想尝试一下。

我用 splice 编写的代码在从 stdin(重定向文件)读取并写入 TCP 套接字时工作得很好,但在从套接字读取和写入 stdout 时,由于 splice 将 errno 设置为 EINVAL 会立即失败。手册页指出,当两个描述符都不是管道(不是这种情况)时设置了 EINVAL,为无法查找的流传递了偏移量(没有传递偏移量),或者文件系统不支持拼接,这导致我我的问题:这是否意味着 TCP 可以管道拼接,但不能拼接

我包括下面的代码(减去错误处理代码),希望我做错了什么。它很大程度上基于Wikipedia 的 splice 示例

附带说明一下,我认为splice_all当文件足够大时,由于管道已填满(?),上面的内容会首先阻塞,所以我还有一个可以fork从管道读取和写入的代码版本同一时间,但它与此版本有相同的错误并且更难阅读。

编辑:我的内核版本是 2.6.22.18-co-0.7.3(在 XP 上运行 coLinux。)

0 投票
3 回答
514 浏览

bash - 如何将命令结果通过管道传输到 -选项?(没有空格)

我有这组管道命令:

它告诉我它首先找到星号的前一行。现在我想将前面的几行管道传输到:

Head 需要紧跟 -n 参数的数字,不带空格,例如:

我怎样才能做到这一点?它只是不接受添加

在命令集的末尾。我的搜索没有结果。谢谢!

0 投票
2 回答
1430 浏览

c - 在 Unix 中区分管道和文件

给定一个 FILE*,是否可以确定底层类型?也就是说,是否有一个函数可以告诉我 FILE* 是管道、套接字还是常规磁盘文件?

0 投票
6 回答
86805 浏览

bash - 如何检测我的 shell 脚本是否通过管道运行?

如何从 shell 脚本中检测其标准输出是否正在发送到终端或是否通过管道传输到另一个进程?

恰当的例子:我想添加转义码来为输出着色,但仅限于交互运行时,而不是在管道时,类似于什么ls --color