tradizionale UNIX di tty EOF
carattere è quello di rendere il blocco read
ritorno dopo aver letto tutto ciò che è tamponata all'interno di un buffer tty line cotto. All'inizio di una nuova riga, significa read
restituendo 0 (lettura zero byte) e, incidentalmente, 0 dimensioni read
è il modo in cui viene rilevata la condizione di fine file su file ordinari.
Ecco perché la prima EOF
nel bel mezzo di una linea costringe solo l'inizio della linea da read
, non facendo libreria di runtime C rileva un fine del file. DueEOF
caratteri in una riga producono una lettura di 0, poiché la seconda forza un buffer vuoto da read
da un'applicazione.
$ cat
foo[press ^D]foo <=== after ^D, input printed back before EOL, despite cooked mode. No EOF detected
foo[press ^D]foo[press ^D] <=== after first ^D, input printed back, and on second ^D, cat detects EOF
$ cat
Some first line<CR> <=== input
Some first line <=== the line is read and printed
[press ^D] <=== at line start, ^D forces 0-sized read to happen, cat detects EOF
Presumo che la vostra libreria di runtime C imita la semantica sopra descritte (non v'è alcun trattamento speciale della ^Z
a livello di kernel32
chiamate, lasciare che le chiamate di sistema da solo, su Windows). Ecco perché probabilmente rileverebbe EOF dopo lo ^Z^Z
anche nel mezzo di una linea di input.
fonte
2013-01-21 11:00:17
Impossibile vedere l'esempio .. Puoi pubblicare il codice qui? –
Questa è una "funzionalità" della shell di Windows. Su Unix, puoi digitare EOF alla fine di una riga digitando Ctrl + D due volte; prova a digitare Ctrl + Z due volte. (Oppure reindirizzare l'input da un file.) –
digitando Ctrl + Z due o più non funziona comunque – Vorgin