Пустой оператор ничего не делает, поэтому
while(nread = read(fd,&c,1)==0);
эквивалентно
while(nread = read(fd,&c,1)==0) { }
Вот что делает утверждение:
- Если
read
возвращает 1 (потому что он прочитал один символ), цикл немедленно завершится (после установки nread
в 0
).
- Если
read
возвращает 0 (потому что он достиг EOF), он попытается прочитать снова (который может возвращать или не возвращать 0).
- Если
read
возвращает -1 (поскольку произошла ошибка), он попытается снова прочитать (что может или не может вернуть -1 снова).
Поскольку это может легко перерасти в бесконечный цикл, этот код наверняка нарушен.