Вот есть у нас какая-то сишная програма, которая дергает getchar() пока оттуда не прилетит EOF.
EOF туда прилетит если ядро на read() ответит, что записало ноль байт.
Запускаем мы ее, чето пишем, потом тыкаем в терминале Ctrl+D и програма успешно завершается, потому что получила EOF.