什么是ubuntu中的EOF以及关于Kernighan和Ritchie的EOF

Rav*_*dav 1 c ubuntu kernighan-and-ritchie

我已经开始学习C了,我也开始使用Ubuntu.我正在通过终端在vim中编写代码.我一直在学习Kernighan和Ritchie.这是代码 -

#include <stdio.h>

int main()
{
 int c;
 while ( (c = getchar()) != EOF)
 putchar(c);
 return 0;
 }
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是: -

  1. 程序停止,如果我按ctrl + z,但它也终止,如果我按ctrl + D,当我在线阅读它说ctrl + z是Windows中的EOF和Linux中的ctrl + d.这是否意味着它们都是Linux中的EOF?如果是这样,那么其他EOF是什么?
  2. 在本书的第一章中有这么复杂的问题是否可以?或者我应该只是通读它,这些想法会在我阅读时被清除掉?

Kei*_*son 13

发生了两件不同的事情.

在Windows中键入Control-Z或在Linux中键入Control-D会触发文件结束条件并导致getchar()返回值EOF.

在Linux中键入Control-Z会有所不同:它会暂停程序的执行.键入Control-Z后,如果键入jobs命令,它将显示已暂停的程序.键入fg将使其恢复并继续接受输入 - 直到您通过键入Control-D发出文件结束信号.如果您的程序生成了一些输出,那将更容易看到.

Control-Z的行为与程序的编写方式无关; Control-Z将暂停(几乎)任何正在运行的程序,无论它是否用C语言写入,以及它是否在等待输入.这种行为特定于Linux和其他类Unix操作系统.

你可能永远不会用尽疑虑和疑问 ; 我当然没有.