命令行工具在像Windows这样的Windows中将二进制数据作为String获取?

时间:2015-06-21 19:18:37

标签: c windows pipe stdin cat

所以我有程序通过将字符串管道化为stdin来转换数据。

cat input.mp3 | myexe

除了我希望这个命令行工具在Windows上运行。

type input.mp3 | myexe.exe

并且cat和type提供不同的输入,因为Windows根据引用我使用cat的问题处理二进制文件。那么我怎样才能在Windows上更忠实地表达猫?或者有没有办法可以从纯粹的C中输入猫?任何帮助将不胜感激。

更新:这是我的代码 https://github.com/Skylion007/LVDOWin

分叉和移植自: 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。

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式重定向文件中的输入:

myexe < input.mp3

并以stdin main函数的开头强制myexe为二进制模式:

_setmode(_fileno(stdin), O_BINARY);

您可能需要根据工具版本添加或删除下划线。

文本模式与二进制模式是从微计算的黑暗时代继承的Windows怪异。它可以追溯到20世纪70年代,从一个名为CP / M的流行的MSDOS前操作系统中复制出来。 Unix和它的所有变种从来没有这样,苹果很久以前就放弃了它的非标准终端方案。您不太可能在旧的大型机上运行代码,这些大型机在基于行的文本文件上有他们自己奇怪的概念。