【发布时间】:2021-01-21 07:20:21
【问题描述】:
所以我正在像这样在命令提示符下向 c 程序提供文件内容。例如-类型“文件名”| C程序.exe 。类型命令获取文件的内容并将其提供给我的 cporgram.exe
代码::
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
# define CACHE 102400
int main(int argc, char* argv[])
{
char *buf = malloc(CACHE * sizeof(char));
FILE* f = fopen("out.txt", "wb");
size_t bytesread;
while(bytesread = fread(buf, sizeof(char), CACHE, stdin))
{
printf("bytes read = %zu\n", bytesread);
fwrite(buf, bytesread, 1, f);
}
return 0;
}
我提供一个图像文件作为输入。问题是程序在读取几个字节后终止。但如果我提供一个文本文件,它似乎工作正常。我应该改变什么,以便我的程序可以正确读取管道图像文件内容
【问题讨论】:
-
嘿,我没有使用 fopen,因为内容在 CMD 中通过管道传输到 STDIN。我只需要阅读我在 fread 中所做的标准输入。读取的样本输出字节数 = 2727,然后程序停止。但是管道文件有更多字节要读取
-
如果打开文件而不是管道会发生什么?
-
这很好,但我必须从 STDIN 读取管道内容,这就是我的用例。它不工作
-
如果你像标签建议的那样使用 Windows,你需要弄清楚如何以二进制模式重新打开标准输入。
-
@Shawn 非常感谢你,这正是我的场景。它现在可以工作了,非常感谢你,你救了我的一天