像 Cat 一样在 Windows 中获取二进制数据作为字符串的命令行工具?

标签 c windows pipe stdin cat

所以我有一个程序可以像这样通过管道将字符串传输到标准输入来转换数据。

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/

相关文章:

c - 当通过管道提供 STDIN 时,getchar() 在 EOF 上循环

c - 计划在五年内返回五个城市的温度

c - 递归函数的意外输出

c - 使用 CodeBlocks 在 C 中打印链接列表

windows - 为什么我的设置命令没有存储任何内容?

python - Windows 上与 Python 共享内存中的信号量?

c - 将标准输出重定向到 C 中的管道

c++ - 在 C++ 中通过命名管道传递结构的 char*

我可以打印 #defines 给定它们在 C 中的值吗?

windows - 从另一个 cmd.exe 提示符中创建一个新的 cmd.exe 窗口