【发布时间】:2021-04-02 23:45:14
【问题描述】:
我正在尝试编写一个从标准输入读取的程序,其中文件被重定向到标准输入。
比如我的程序叫做scan,那么命令行的调用会是:
./scan < file.txt
我想为其分配一个大内存块,由char* 指向。我不能只将文件名作为输入,因为这是我必须处理的要求。我想知道是否可以计算出输入缓冲区中的字节数,以便我可以一次性批量读取标准输入。
类似
char* read_all_stdin()
{
size_t amt = num_of_bytes_in_stdin(); //how do this?
char* file = (char*) malloc(amt+1);
fread(file,1,amt,stdin); //idk if this is allowed either
file[amt] = '\0';
return file;
}
【问题讨论】:
-
不要费心尝试预先确定您需要多少空间。一次读取一个字符并根据需要增加缓冲区。可以在github.com/wrp/examples/blob/main/c/dynamic-array.c 看到一个例子
-
@WilliamPursell:你的 GitHub 提供了大量的好例子(例如
(a->start < a->end) ? *a->start++ : EOF)!
标签: c stdin io-redirection