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

java - 在 Windows 上从 Java 到 C++ 的高效数据传输

我希望将大量数据(高达 ~1 Gbit)从 Java 流式传输到 C++ 应用程序(都在同一台机器上)。我目前在 Linux 上使用 FIFO,但也需要 Windows 解决方案。

最跨平台的方法似乎是本地套接字,但是:a)我不会从 TCP 校验和和从内核空间复制到 & 中获得巨大的开销,并且 b)普通用户的防火墙不会尝试检查和也许阻止连接?

似乎更安全的解决方案可能是使用 JNI 和命名管道 API (\.\pipe\blah),使连接双方的平台特定混乱不堪。

这些真的是我的两个最佳选择吗(人们会推荐哪一个?)谢谢!

0 投票
2 回答
8475 浏览

unicode - 即使使用 /U 开关,Windows cmd 管道也不是 unicode

我有一个小的 c# 控制台程序,它使用 Console.WriteLine 输出一些文本。然后,我将此输出通过管道传输到一个文本文件中,例如:

c:myprogram > textfile.txt

但是,该文件始终是 ansi 文本文件,即使我使用 /u 开关启动 cmd 也是如此。命令/?说 /u 开关:

/U 使管道或文件的内部命令输出为 Unicode

当我做一个

c:echo "foo" > text.txt

text.txt 是 unicode(没有 BOM)

我想知道为什么将我的控制台程序的输出通过管道传输到一个新文件中不会同样创建一个 unicode 文件,我该如何改变它?

我只是使用 Windows Power Shell(它会生成一个带有正确 BOM 的 unicode 文件),但我仍然想知道如何使用 cmd 来完成它。

谢谢!

0 投票
9 回答
74387 浏览

python - 如何使用 subprocess.Popen 通过管道连接多个进程?

如何使用 Pythonsubprocess模块执行以下 shell 命令?

输入数据将来自一个字符串,所以我实际上并不需要echo. 我已经走了这么远,谁能解释我如何让它通过管道sort

更新:请注意,虽然下面接受的答案实际上并未按要求回答问题,但我相信 S.Lott 是正确的,最好避免首先解决该问题!

0 投票
5 回答
5367 浏览

linux - Linux 内核 /proc FIFO/管道

我目前正在尝试创建一个内核模块,该模块将根据内核事件生成数据并将它们推送到文件中。在读到这很糟糕(我同意)之后,我决定将数据放在 /proc 文件中,用户程序可以在必要时从中提取数据会更有意义。然而,这个想法导致了各种各样的问题,特别是何时以及如何清除这个文件。所以我想......“为什么我不在 /proc 中创建一个命名管道并从中读取呢?”

我已经掌握了为 proc 文件设置读取函数和写入函数的一般要点,但我仍然在如何处理这个问题上遇到概念上的问题。也就是说,我将如何编写这样一个函数来获取任意数据并将其从内核写入这样的管道?有谁知道如何将数据从内核空间推送到命名管道?最后,它不一定/proc 文件(特别是如果我这样做是错误的),但这是我得出的结论。然后我必须弄清楚如何从用户空间程序附加到它,但我觉得这是一个单独的问题。

0 投票
3 回答
9261 浏览

c++ - stdin/stdout/stderr 上的跨平台 (linux/Win32) 非阻塞 C++ IO

我正在尝试通过具有以下特征的标准输入/标准输出找到非阻塞 IO 的最佳解决方案:

  • 只要有足够的数据,就读入n 个大小的块。
  • 如果没有足够的数据,则读入部分块。
  • 如果没有可用数据,则阻塞直到有一些数据(即使它可能小于n)。

目标是在立即处理“控制”代码的同时允许有效传输大型数据集(而不是让它们停留在某个部分填充的缓冲区中)。

我知道我可以通过使用线程和 istream::get() 循环来实现这一点,或者通过编写一堆特定于平台的代码(因为你不能 select() 在 Windows 中的文件句柄上)......((那里也是 istream::readsome() ,这似乎很有希望,但我在谷歌上能找到的唯一结果是人们说它实际上效果不佳。))

由于我没有对这些 API 进行太多编码,也许有更好的方法。

0 投票
2 回答
6921 浏览

bash - 如何附加到管道上?

所以我的问题是我是否可以以某种方式将数据发送到我的程序,然后将相同的数据及其结果发送到另一个程序,而无需创建临时文件(在我的情况下为 ouputdata.txt)。最好使用 linux 管道/bash。

我目前执行以下操作:

猫输入数据.txt | ./MyProg > 输出数据.txt

cat inputdata.txt outputdata.txt | ./MyProg2

0 投票
4 回答
1356 浏览

c++ - 简单的匿名管道 - 您使用什么包装器模型?(WinAPI, C++)

我在 Windows 中有两个正在运行的进程,每个进程都有一个到另一个进程的管道。

我想序列化一个复杂的类并将其从一个进程传输到另一个进程。我已经制定了序列化程序,并且我知道管道正在发送二进制流。我应该如何发送我的序列化数据?我正在使用 WinAPI 和 C++。

我应该开发自定义协议吗?如果是这样,它应该是这个特定类的通用还是唯一的?发送序列化类时可以保留虚拟表吗?

在这种情况下是否有常用的模型或设计模式?一些示例代码将不胜感激。谢谢!

0 投票
2 回答
2938 浏览

linux - Linux how do I put double quotes around a file before piping it to tar?

I use ls to obtain my filename which has white space so it looks something like:

my file with whitespace.tar.bz2

I want to pipe this to tar similar to:

How can I insert double quotes before piping it to tar?

0 投票
1 回答
6988 浏览

winapi - CreateFile("CONIN$" ..) 是做什么的?

我正在破解plink的源代码以使其与 unison 兼容。

如果你不知道,unison是一个文件同步工具,它运行一个“ssh”命令来连接远程服务器,但是windows没有ssh.exe;有 plink,它非常接近但不够接近(它的行为不像 unison 期望的那样),所以人们通常在它周围做包装,就像这个

问题之一是 unison 期望密码提示打印到 stderr(但 plink 将其打印到 stdout,并导致 unison 混淆),所以我想,嗯,应该足够简单,破解我的 thru plink 代码并制作它将提示打印到标准输出。所以我破解了我的方式并做到了。

Next problem: I can't respond to the prompt!! no matter what I type, it has no effect.

the code for getting input is roughly like this:

I'm not sure why it's done this way, but I'm not an expert in designing command line tools for windows, so what do I know! But I figure something is missing in setting up the input handle.

I looked at the source code for the above wrapper tool and I see this: hconin=CreateFile("CONIN$",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0,0)

and I try it (just for the heck of it)

and surprisingly it works! I can now respond to the prompt!

Why is this? what is "CONIN$"? and why is it different from the STD_INPUT_HANDLE?

我可以“猜测”FILE_SHARE_READOPEN_EXISTING在其中发挥作用(因为 ssh 是从另一个进程中运行的),但我想了解这里发生了什么,并确保这段代码没有一些不需要的方面效果或安全漏洞或类似的可怕的东西!

0 投票
2 回答
3107 浏览

c++ - 读\写 boost::binary_oarchive 到管道

我将继续构建两个简单的进程,通过简单的(匿名)管道将类对象相互投掷(参见我的上一篇文章)。现在我为自己揭示了 boost::serialization (感谢回答的人),并试图通过 ::WriteFile::ReadFile 对某些类进行序列化。所以 - 我做错了什么?


1)我创建了一些类

2)现在我正试图从这个类中读取二进制存档并将其内容写入管道的一端......

它不会那样工作,对吧?那么,会如何呢?

3) 另一边的操作相同?