c - 什么是 ubuntu 中的 EOF 以及 Kernighan 和 Ritchie

标签 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;
 }

现在,我的问题是:-

  1. 如果我按 ctrl+z 程序停止,但如果我按 ctrl+D 程序也会终止,当我在网上阅读它时它说 ctrl+z 是 Windows 中的 EOF,而 ctrl+d 在 linux 中。这是否意味着它们在linux中都是EOF?如果是这样,其他 EOF 是什么?
  2. 在本书的第一章中出现如此复杂的问题可以吗?还是我应该通读一遍,这些想法会在我继续阅读时被清除?

最佳答案

两件不同的事情正在发生。

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

在 Linux 中键入 Control-Z 会有所不同:它暂停程序的执行。键入 Control-Z 后,如果键入 jobs命令,它将显示您暂停的程序。打字fg将导致它恢复并继续接受输入——直到您通过键入 Control-D 发出文件结束条件信号。这样可以更容易地查看您的程序是否生成了一些输出。

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

您可能永远用不完 doubts and questions ;我当然没有。

关于c - 什么是 ubuntu 中的 EOF 以及 Kernighan 和 Ritchie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20075114/

相关文章:

c - 为什么编译器报告 'may be used uninitialised in this function' ?

C if else 循环不起作用

PHP 在 CentOS 上的性能很差

c - 将 sbrk 的结果分配给指针时的对齐问题 - K&R

c - 将文件逐行拆分为单词数组

c - 在 C 中,无法获取数组来保存新值

git - Windows VS Code 能否在连接到 git 存储库的 Ubuntu 主机上通过 ssh 运行 git 命令

user-interface - 如何在 Ubuntu 中使用 g++ 编译 fltk 程序?

c - C程序中的不一致

c - for循环迭代问题