从管道读取的字节数

c47*_*57p 1 c linux pipe

当从Linux中的管道读取(C,fread /类似)时,当达到EOF时,如何知道读取了多少字节?如果我一次读取块,fread()只返回读入的完整块的数量,并且我不能一次读取一个字节,因为这太慢了.当然,ftell()返回-1.

dwc*_*dwc 6

您可以fread()通过将size参数设置为1并将其设置为nmembers您喜欢的任何大小来执行此操作.然后"成员"的数量是字节数,你仍然可以有一个体面的缓冲区:

char     buf[8192];
size_t   n;
n = fread(buf, 1, sizeof buf, f);
Run Code Online (Sandbox Code Playgroud)

代替

char     buf[8192];
size_t   n;
n = fread(buf, sizeof buf, 1, f);
Run Code Online (Sandbox Code Playgroud)