如何欺骗期望 file:// 从标准输入读取的应用程序?

Ars*_*nko 2 pipe stdin

文件的URI方案使得能够以指定的URI到本地存储的文件,如file:///home/demo/sample

可以用来指定stdin吗?

例如,使用 CURL:

curl file:///home/demo/sample
Run Code Online (Sandbox Code Playgroud)

显示文件的内容;

echo "Hello" | curl file:///dev/fd/0
Run Code Online (Sandbox Code Playgroud)

给出一个空结果,而我希望它显示“你好”。顺便一提:

echo "Hello" | cat /dev/fd/0
Run Code Online (Sandbox Code Playgroud)

实际上向输出显示“Hello”。

我应该把什么放在file://目标之后stdin


上下文:我正在试验Motion,它能够从 HTTP URI 或指定为 的文件中读取数据file://,但似乎没有直接从中读取视频流的选项stdin(以及近两年前提出的相关问题从未被回答)。我希望能够欺骗应用程序认为它读取了一个文件,而实际上它正在从ffmpeg.

PSk*_*cik 5

curl file:///dev/fd/0
Run Code Online (Sandbox Code Playgroud)

curl从文件描述符 0 ( stdin)读取的正确方法。

取任何可读的文本文件,做

<theTextFile.txt curl file:///dev/fd/0
Run Code Online (Sandbox Code Playgroud)

它应该像cat.

您的问题是“如何从管道中读取 curl ?” 恐怕答案是:patch curl 的源代码


如果您分析顶部示例中的 curl 轨迹,您将看到它mmap是文件。mmap如果文件是管道,则 ing 将不起作用。如果使用卷曲定期readwrite系统调用,不会有什么区别<theTextFile.txt curl file:///dev/fd/0cat theTextFile.txt curl | file:///dev/fd/0,这是应该的,海事组织。