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.