Saya mengerti bahwa EOT adalah kode ASCII 4, sedangkan EOF dikodekan sebagai -1 (setidaknya dalam C). Sebelum saya mengetahui bahwa EOF dipetakan ke -1, saya pikir itu hanya sinonim untuk EOT. Mengapa EOF dipetakan ke -1 daripada EOT? Sejauh yang saya tahu, mereka berdua melakukan hal yang sama, yaitu menghentikan aliran file. Satu-satunya perbedaan yang dapat saya lihat adalah bahwa EOT juga menghentikan perintah di bash Shell. Saya ingin deskripsi perbedaan teknis yang tepat antara kedua kode ini.
Jawaban yang Diterima:
Secara umum, EOF bukanlah sebuah karakter; itu karena tidak adanya karakter.
Jika sebuah program berjalan pada terminal dalam mode kanonik dengan pengaturan default (yaitu program C biasa yang hanya menggunakan stdio), ia tidak akan pernah melihat karakter ASCII EOT. Driver terminal mengenali karakter itu dan membuat kondisi EOF (yang pada level rendah adalah nilai balik 0 dari read()
). Pustaka stdio menerjemahkan kondisi EOF tersebut ke dalam nilai kembalian yang sesuai untuk fungsi yang dimaksud (EOF
makro untuk getchar()
, pointer nol untuk fgets()
, dll.)
Nilai numerik dari EOF
makro tidak relevan di mana pun kecuali di pustaka C, dan seharusnya tidak memengaruhi pemahaman Anda tentang arti kondisi EOF.