Количество байтов, прочитанных из канала - PullRequest
1 голос
/ 14 мая 2009

При чтении из канала в Linux (C, fread / подобное), когда достигается EOF, как узнать, сколько байтов было прочитано? Если я читаю блоки за раз, fread () возвращает только количество прочитанных блоков, и я не могу прочитать один байт за раз, потому что это слишком медленно. Конечно, ftell () возвращает -1.

Ответы [ 2 ]

6 голосов
/ 14 мая 2009

Вы можете сделать это с помощью 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 голос
/ 14 мая 2009

read() возвращает количество прочитанных байтов (когда все в порядке).

...