从Win32的stdin读取二进制数据,并将其写入文件

什么是Unixpipe道的Windows(Win32)命令行相当于:

myprog myarg | cat >out.dat 

请注意,我想要一个pipe道,以testingmyprog可以成功写入pipe道,所以请不要简化到这个:

 myprog myarg >out.dat 

我猜想是这样的

 myprog myarg | copy /b con out.dat 

会工作,但我没有一台Windows机器来检查。

请注意,生成的数据是二进制的,它包含所有可能的字节值0到255,并且它们都必须完整保留,没有任何转换。

在这个例子中,没有什么东西可以与Windows中的cat相提并论。 您建议的命令( copy /b con )肯定不会起作用,因为con是控制台设备,而不是标准输入。

你可以尝试Win32的GNU工具 ,其中包括一个cat的端口。 否则,您可能需要编写自己的代码,这当然很简单。

由于Windows没有附带这样的程序,所以在C

 #include <stdio.h> #include <io.h> #include <fcntl.h> int main() { char buffer[16384]; int count; _setmode(_fileno(stdin), _O_BINARY); _setmode(_fileno(stdout), _O_BINARY); while ((count = fread(buffer, 1, sizeof(buffer), stdin)) != 0) fwrite(buffer, 1, count, stdout); return 0; } 

您可以轻松修改它以写入您选择的文件而不是stdout