Есть несколько других проблем с этой программой.
Чтение файла с использованием:
if (read(s, &buf, 1) < 0) ...
не помещает значение EOF в buf, поэтому
if(buf != EOF)
и
while(buf != EOF)
не прекратит работу, когда достигнет конца файла.
если buf
получает введенное в него значение символа 0xFF
, тогда это значение будет расширено знаком и будет принято за EOF
.
read
сигнализирует конец файла, возвращая 0.
s
не инициализирован должным образом, поэтому он может быть непредсказуемым при чтении файлового дескриптора.