linux下:
ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程。常用于终止正在运行的程序。
ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程。
ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。
ctrl-/ 发送 SIGQUIT 信号给前台进程组中的所有进程,终止前台进程并生成 core 文件。
Key Function
Ctrl-c Kill foreground process
Ctrl-z Suspend foreground process
Ctrl-d Terminate input, or exit shell
Ctrl-s Suspend output
Ctrl-q Resume output
Ctrl-o Discard output
Ctrl-l Clear screen
用stty -a看看终端配置。
程序:
- <span style="font-family:'Comic Sans MS';">#include <stdio.h>
- void main()
- {
- int c = getchar();
- int i = 0;
- while (c != EOF)
- {
- putchar(c);
- c = getchar();
- i++;
- }
- if (feof(stdin))
- {
- printf(" End of file reached.%d", i);
- }
- else
- {
- printf(" Something went wrong.");
- }
- }</span>
要结束输入必须在新的一行(输入enter迫使输出"标准输入"缓存区之后)使用Ctrl+Z。
在linux下,可以在输入enter迫使输出"标准输入"缓存区之后,在新行按Ctrl-D结束输入,这种方法类似于windows的处理方式。也可以在行尾连续两次键入Ctrl-D。
相关解析:
Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF。
如果在一行结束时按下Ctrl-D,则表示输出"标准输入"缓存区,所以这时再按一次Ctrl-D就代表EOF,从而就可以结束输入;
那么,如果真的想输入Ctrl-D怎么办?这时必须先按下Ctrl-V,然后就可以输入Ctrl-D,系统就不会认为这是EOF信号。Ctrl-V表示按"字面含义"解读下一个输入,要是想按"字面含义"输入Ctrl-V,连续输入两次就行了。
注:Linux中按下Ctrl-Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl-C表示终止该进程。
Windows中,在新的一行(输入enter迫使输出"标准输入"缓存区之后)开头按下Ctrl-Z表示EOF;如果真的想输入Ctrl-Z,在非行开头的地方输入Ctrl-Z即可,在windows中不能将Ctrl-Z表示为行首字符。
所以两种平台下,都需要先输出“标准输入”缓存区,然后才能用特殊的方法来代表EOF