所以我有一个程序可以像这样通过管道将字符串传输到标准输入来转换数据。
cat input.mp3 | myexe
除非我希望此命令行工具在 Windows 上运行。
type input.mp3 | myexe.exe
并且 cat 和 type 提供不同的输入,因为 Windows 如何根据提到我使用 cat 的问题处理二进制文件。那么我怎样才能在 Windows 上更忠实地表示 cat 呢?或者有什么办法可以用纯 C 语言从 cat 输入?任何帮助将不胜感激。
更新:这是我的代码 https://github.com/Skylion007/LVDOWin
fork 并移植自: https://github.com/m13253/lvdo
我在我自己的代码中稍微修改了参数解析(只有 get-opt 而不是 get-opt-long),除此之外我在后面的 repo 中使用了与自述文件相同的命令行语句。我会在这里发布代码,但是有很多问题,我不想让一个已经很复杂的答案不知所措。
type hello.mp3 | lvdoenc.exe -s 640x480 -q 6 -b8 | x264 --input-res 640x480 --fps 1 --profile high --level 5.1 --tune stillimage --crf 22 --colormatrix bt709 --me dia --merange 0 -o public.mkv -
是我最初用来对文件进行编码的命令示例。在 Linux 上,我会使用 cat。
最佳答案
您可以通过这种方式重定向文件中的输入:
myexe < input.mp3
并在 myexe
中的 main
函数开始处强制 stdin
为二进制模式:
_setmode(_fileno(stdin), O_BINARY);
您可能需要添加或删除下划线,具体取决于您的工具版本。
文本模式与二进制模式是从微计算的黑暗时代继承下来的 Windows 怪癖。它一直追溯到 1970 年代,从一个名为 CP/M 的流行的前 MSDOS 操作系统复制而来。 Unix 及其所有变体从来没有这个,Apple 很久以前就放弃了它的非标准行尾方案。您不太可能在旧的大型机上运行您的代码,这些大型机对基于行的文本文件有自己奇怪的概念。
关于像 Cat 一样在 Windows 中获取二进制数据作为字符串的命令行工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30968377/