2014-03-06 4 views
2
while( rd = read(fd1, buf, 512) != 0) 
{ 
    len += rd; 
    if(readed < 0) 
    perror("read: "); 
} 

Страницы MAN указывают, что read() возвращает количество прочитанных байтов, но в моем случае этот код возвращает количество блоков (зависит от третьего аргумента) или количество итераций. например, у меня есть файл с 36 символами, и этот код возвращает 1, когда все символы обычно читаются, если я изменяю 512 на 4, он вернет 9 и так далее. Пожалуйста, исправьте меня, и этот код возвращает количество байтов, которые считывают с 512 блоков размеромread() return «неправильное» значение

+0

Да, спасибо всем. Я забыл, что обработка операций справа налево и! = Имеют более высокий приоритет, чем = – Ivan

ответ

9
rd = read(fd1, buf, 512) != 0 

означает

rd = (read(fd1, buf, 512) != 0) 

Результат != всегда либо 0 или 1.

Вы, вероятно, имел в виду

while ((rd = read(fd1, buf, 512)) != 0) 
1

Неправильное использование скобок, Pl. измените свой код, как показано ниже. Надеюсь, это даст вам правильный результат.

while( (rd = read(fd1, buf, 512)) != 0) 
{ 
    len += rd; 
    if(rd < 0) 
    perror("read: "); 
} 
1

Вы пытались установить третье значение вне условия цикла? Без дополнительной скобки я думаю, что настройка и тестирование секции значения в состоянии while неверны.

+2

Это скорее комментарий, чем ответ ... Попробуйте его улучшить! – fedorqui

Смежные вопросы