当从Linux中的管道读取(C,fread /类似)时,当达到EOF时,如何知道读取了多少字节?如果我一次读取块,fread()只返回读入的完整块的数量,并且我不能一次读取一个字节,因为这太慢了。当然,ftell()返回-1。
答案 0 :(得分:6)
您可以fread()
将size
参数设置为1并将nmembers
设置为您喜欢的任何大小,从而执行此操作。然后“成员”的数量是字节数,你仍然可以有一个合适大小的缓冲区:
char buf[8192];
size_t n;
n = fread(buf, 1, sizeof buf, f);
而不是
char buf[8192];
size_t n;
n = fread(buf, sizeof buf, 1, f);
答案 1 :(得分:1)
read()
返回读取的字节数(当没有出错时)。