所以我有程序通过将字符串管道化为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。
答案 0 :(得分:2)
您可以通过以下方式重定向文件中的输入:
myexe < input.mp3
并以stdin
main
函数的开头强制myexe
为二进制模式:
_setmode(_fileno(stdin), O_BINARY);
您可能需要根据工具版本添加或删除下划线。
文本模式与二进制模式是从微计算的黑暗时代继承的Windows怪异。它可以追溯到20世纪70年代,从一个名为CP / M的流行的MSDOS前操作系统中复制出来。 Unix和它的所有变种从来没有这样,苹果很久以前就放弃了它的非标准终端方案。您不太可能在旧的大型机上运行代码,这些大型机在基于行的文本文件上有他们自己奇怪的概念。