int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
// 或
while ((c = fgetc(fp)) != EOF) { ... }
// 或
while (fgets(buf, sizeof(buf), fp) != NULL) { ... } // fgets 遇 EOF 返回 NULL
// 錯誤示範
char c;
while ((c = getchar()) != EOF) { ... } // 若 char 為 unsigned (0-255),永不等於 -1 → 無限迴圈
// 正確:int c;
| 平台 | 文字檔行尾 | 終端觸發 EOF | 二進制檔 EOF |
|---|---|---|---|
| Linux/macOS | LF (\n, 0x0A) | Ctrl+D | 讀取到檔案末尾 |
| Windows | CRLF (\r\n, 0x0D 0x0A) | Ctrl+Z (行首) + Enter | 讀取到檔案末尾 |
對 `socket`、`pipe`、`FIFO`,EOF 表示對端關閉寫入端 (`shutdown(fd, SHUT_WR)` 或 `close(fd)` 且無其他寫入端引用)。非阻塞模式下 `read` 返回 -1 且 `errno == EAGAIN/EWOULDBLOCK` 非 EOF。