Strano comportamento control-d


9

Posso usare catun editor di testo molto semplice facendo cat > foo.txt.
Se poi digito:

bar
baz

e poi premi ctrl+ D, ora è così:

$ cat > foo.txt
bar
baz^D

con il cursore sul ^. Se lo premo ancora una volta, il file verrà salvato. Tuttavia, se premo qualcosa (va bene forse non nulla, ma soprattutto qualsiasi cosa), continuo a modificare il file.

Questo comportamento è normale?

Risposte:


13

Sì. Ha a che fare ^Ddavvero: interrompe la read(2)chiamata corrente .

Se il programma funziona int rdbytes = read(fd, buffer, sizeof buffer);e si preme in ^Dmezzo, read()ritorna con i byte attualmente letti nel buffer, restituendo il loro numero. Lo stesso accade alla terminazione in linea; alla \nfine viene sempre consegnato.

Quindi solo ^Da all'inizio di una riga o dopo un'altra ^Dha l'effetto desiderato di avere un read()ritorno 0, segnalando EOF.


Dipende da ciò che definisci una linea da (con o senza un trailing \n.. ma è possibile premere ^Ddue volte in successione e causare una condizione EOF senza generare un carattere newline finale (come premendo Enter prima ^Ddell'operazione).
Peter

Hai ragione, ho dimenticato di dire che: l'inizio della riga e "appena premuto ^ D" sono le due situazioni in cui il buffer è vuoto, quindi ^ D avrà un read()ritorno 0, indicando EOF.
glglgl

11

Sì, questo è un comportamento normale. Un singolo Control-D normalmente scoppia solo se è l'inizio della riga. Questo esce con un Control-D:

$ cat > foo.txt
bar
baz
^D

Control-D due volte alla fine di una riga viene
espulso

Sì hai ragione. Non intendevo implicare diversamente. Ho modificato la mia risposta per chiarire.
Klox,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.