commands - Señal EOF en terminal mac osx
terminal mac comandos (3)
De forma predeterminada, los terminales OS X (anteriormente Mac OS X) reconocen EOF
cuando se presiona Ctrl - D al principio de una línea.
En detalle, la operación real es que, cuando se presiona Ctrl - D , todos los bytes en el búfer de entrada del terminal se envían al proceso en ejecución utilizando el terminal. Al comienzo de una línea, no hay bytes en el búfer, por lo que se informa al proceso que no hay cero bytes disponibles, y esto actúa como un indicador EOF
.
Este procedimiento se duplica como un método para proporcionar información al proceso antes del final de la línea: el usuario puede escribir algunos caracteres y presionar Ctrl - D , y los caracteres se enviarán al proceso inmediatamente, sin la espera habitual de ingresar / regresar ser presionado Después de realizar esta operación de "enviar todos los bytes en búfer inmediatamente", no quedan bytes en el búfer. Entonces, cuando se presiona Ctrl - D por segunda vez, es lo mismo que el comienzo de una línea (no se envían bytes y el proceso recibe cero bytes) y actúa como un EOF
.
Puede aprender más sobre el comportamiento del terminal usando el comando "man 4 tty" en Terminal. La disciplina de línea por defecto es termios. Puede aprender más sobre la disciplina de línea de termios usando el comando man termios
.
Estoy sorprendido por la pregunta 1.5.2 en K&R. Busqué en Google por un tiempo y descubrí que tengo que proporcionar la entrada EOF después de ingresar los caracteres.
long nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld/n", nc);
return 0;
Probé tanto commnad-D como control-D como entradas EOF pero nada funcionó. ¿Alguna idea de cómo suministrar el EOF para mac osx?
Me lo imaginé. Tienes que presionar Ctrl + D + D. Mantenga presionado el control y presione D dos veces. Tengo que decir que es una secuencia de teclas extraña.
Si desea ver qué EOF está configurado en su terminal, puede escribir
stty all
en mi mac, esto da la salida -
speed 9600 baud; 24 rows; 80 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
-extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
-ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
discard dsusp eof eol eol2 erase intr kill lnext
^O ^Y ^D <undef> <undef> ^? ^C ^U ^V
min quit reprint start status stop susp time werase
1 ^/ ^R ^Q ^T ^S ^Z 0 ^W
Puedes ver cuatro líneas hacia arriba desde la parte inferior, tres celdas en eof es ^ D.
Aquí hay una descripción más completa here que es donde encontré la información.