如何欺骗期望从 stdin 读取 file:// 的应用程序?

如何欺骗期望从 stdin 读取 file:// 的应用程序?

A文件 URI 方案可以指定本地存储的文件的 URI,例如file:///home/demo/sample.

可以用来指定吗stdin

例如,使用 CURL:

curl file:///home/demo/sample

显示文件的内容;

echo "Hello" | curl file:///dev/fd/0

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

echo "Hello" | cat /dev/fd/0

实际上在输出中显示“Hello”。

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


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

答案1

curl file:///dev/fd/0

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

获取任何可读的文本文件,执行

<theTextFile.txt curl file:///dev/fd/0

它应该像 一样工作cat

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


如果您分析上面示例中的curl strace,您将看到它mmap是文件。mmap如果文件是管道,则 ing 将不起作用。如果curl 使用常规调用read和系统调用,则 和write之间不会有任何区别,这应该是这样的,IMO。<theTextFile.txt curl file:///dev/fd/0cat theTextFile.txt curl | file:///dev/fd/0

相关内容