LINUX.ORG.RU

Не верное кол-во считанных байт

 


0

0

Собственно, вот.

size = ftell(f); // 26
...
fseek(f, 0, SEEK_SET);
...
tmp = fread(buf, 1, BUFF_SIZE, f); // 20 ДВАДЦАТЬ! BUFF_SIZE 512
В size - правильное значение. В tmp - не правильное.

Deleted

Последнее исправление: Bizun (всего исправлений: 2)

Ответ на: комментарий от Deleted

Канонiчно было бы так:

size_t len;

fseek(fd, 0L, SEEK_END);
len = ftell(fd);
fseek(fd, 0L, SEEK_SET);

buf = calloc(len, sizeof(char));
assert(buf);

fread(buf, sizeof(char), len, fd);

В общем в fread надо не BUFSZ пихать, а сколько мы в самом деле прочесть хотим (и можем).

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)

Изолированный рабочий пример обычно отвечает на вопрос. Навскидку ferror, feof после, printf(BUFF_SIZE) перед fread.

arturpub ★★
()

Представь read может считать меньше чем попросили, поэтому нужно читать в цикле и наконец начать уже обрабатывать ошибки чтобы таких тем не возникало

quest ★★★★
()
Ответ на: комментарий от quest

Мм.. Про ошибки - да, про читать в цикле - похоже нет.

RETURN VALUE

Upon successful completion, fread() shall return the number of elements successfully read which is less than nitems only if a read error or end-of-file is encountered. If size or nitems is 0, fread() shall return 0 and the contents of the array and the state of the stream remain unchanged. Otherwise, if a read error occurs, the error indicator for the stream shall be set, [CX] and errno shall be set to indicate the error.

http://pubs.opengroup.org/onlinepubs/009695399/functions/fread.html

arturpub ★★
()
Ответ на: комментарий от arturpub

да действительно я вспоминаю что когда юзал fread()/frwite() (а было это лет 15 назад) то сравнивал результат с тем что запросил. еще один довод вместо этого юзать read()/write()

quest ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.