我的编程空间,编程开发者的网络收藏夹
学习永远不晚

linux eof的含义是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

linux eof的含义是什么

这篇文章主要介绍“linux eof的含义是什么”,在日常操作中,相信很多人在linux eof的含义是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux eof的含义是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

linux eof一般指文件末尾;EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取,在Linux中,在新的一行的开头,按下“Ctrl+D”,就代表EOF。

linux eof是什么意思?

EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取。在linux下,一般指文件末尾。

怎么通过 EOF 来判断程序是否读取到了文件末尾?

Linux 系统一个非常重要的思想就是:一切皆文件。不管是标准输入,文件系统中的普通文本文件,还是网络流都可以看做是文件,都可以通过 read/write 函数进行读写操作。因此,不同的文件类型,判断是否读取到文件末尾的方式也就有所不同,下面就按照

  • 普通文本文件

  • 标准输入文件(stdin)

  • socket 流文件

这三类文件来介绍判断它们是否读取到文件末尾的方法。

普通文本文件

这里的普通文件指的是我们平时在通过文件管理器所能看到那些文本文件,它存在于 Linux 中的文件系统中,并且文件的大小是固定的。

对于这种文件,Linux 系统判断普通文本文件是否读取到文件末尾的方法是:read 函数会对所打开的文件维护一个读取指针,然后根据这个指针跟文件开始位置的指针值相减得到一个相对于文件开始位置的偏移字节数,最后通过这样一个偏移字节数和文件本身的大小进行一个比较,如果相对于文件开始位置的偏移字节数大于文件本身的大小,那么就返回一个 EOF 常量,说明此时已经读取到文件末尾了。

所以,按照上面这样写法,如果一个文件含有n个字符,那么while循环的内部操作会运行n+1次。所以,最保险的写法是像下面这样:

int c = fgetc(fp);while (c != EOF) {    do something;    c = fgetc(fp);}if (feof(fp)) {    printf("\n End of file reached.");} else {    printf("\n Something went wrong.");}

标准输入文件

标准输入文件(stdin)它对应的是外设键盘输入,而在 Linux 系统中它被抽象成一个文件,准确地说是一个流文件。这种文件和上面普通文本文件最大的区别就是它的文件大小是不固定的,它就像是一个水管的进水端,可以在任何时候都可以接收输入。

正是因为标准输入文件这种流式的特点,决定了无法通过前面提到那种比较文件大小方法来判断是否读取到了文件末尾。因此,Linux 系统判断标准输入文件是否读取到文件末尾的方法是:设置一个特殊的输入标记来表示文件末尾,而在Linux 系统中这个标记就是组合键Ctrl+D,当系统捕获到这个组合键时,就让 r read 函数返回一个 EOF 常量,告知程序已经读取到标准文件的末尾了。

socket 流文件

socket 流文件和标准输入文件类似都是流式文件,并且它是从网络上进行数据读取,所以上面两种判断文件是否读取到末尾的方法都不适用于 socket 流文件。

那么客户端进程怎么判断服务端进程是否已经写完所有数据?

在 socket 流文件中,当客户端进程通过 read 函数读取远程服务端进程发送过来的数据时,使用的是阻塞I/O的方式进行读取的。只要客户端和服务端之间的连接没有断开,如果服务端没有向 socket 写入数据,那么客户端的读操作就会阻塞,直到服务端中写入了新的数据。

如果服务端进程关闭了socket连接,那么客户端会接收到服务端发送过来的一个 TCP 协议的 FIN 数据包,然后客户端进程中原本阻塞着等待接收服务端进程数据的 read函数此时就会被唤醒,返回一个值 0。这跟我们前面提到两种文件读到文件末尾返回 EOF(值为-1)的情况有点差别,所以在程序中从 socket 进行读取操作时,判断数据流结束的标志不是 -1 而是 0。

Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出”标准输入”的缓存区,所以这时必须按两次Ctrl-D);Windows中,Ctrl-Z表示EOF。(顺便提一句,Linux中按下Ctrl-Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl-C表示终止该进程。)

那么,如果真的想输入Ctrl-D怎么办?这时必须先按下Ctrl-V,然后就可以输入Ctrl-D,系统就不会认为这是EOF信号。Ctrl-V表示按”字面含义”解读下一个输入,要是想按”字面含义”输入Ctrl-V,连续输入两次就行了。

所以,一个简单的从 socket 文件读取数据的样例代码,通常是下面这样的:

char recvline[MAX_LINE_LENGTH];int read_count;while ((read_count = read(sock_fd, recvline, MAX_LINE_LENGTH)) > 0){    printf("%s\n", "String received from server: ");    fputs(recvline, stdout);}

到此,关于“linux eof的含义是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

linux eof的含义是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

linux eof的含义是什么

这篇文章主要介绍“linux eof的含义是什么”,在日常操作中,相信很多人在linux eof的含义是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux eof的含义是什么”的疑惑有所帮助!接下来
2023-07-05

linux kernel的含义是什么

今天小编给大家分享一下linux kernel的含义是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
2023-03-24

linux stty的含义是什么

这篇文章主要介绍“linux stty的含义是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux stty的含义是什么”文章能帮助大家解决问题。在linux中
2023-04-14

linux .exe的含义是什么

本篇内容介绍了“linux .exe的含义是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!linux .exe是指exe文件;在Linu
2023-07-05

linux ppc64的含义是什么

今天小编给大家分享一下linux ppc64的含义是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
2023-03-23

Linux grub的含义是什么

本文小编为大家详细介绍“Linux grub的含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux grub的含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
2023-04-19

linux dash的含义是什么

本篇内容介绍了“linux dash的含义是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!linux da
2023-04-20

linux epel的含义是什么

这篇“linux epel的含义是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linux epel的含义是什么”文章吧
2023-04-21

linux mv的含义是什么

今天小编给大家分享一下linux mv的含义是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
2023-04-19

linux lun的含义是什么

本篇内容介绍了“linux lun的含义是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!linux lun
2023-04-20

amazon linux的含义是什么

这篇文章主要讲解了“amazon linux的含义是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“amazon linux的含义是什么”吧!amazon l
2023-04-20

linux server的含义是什么

今天小编给大家分享一下linux server的含义是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
2023-03-19

linux rm的含义是什么

本文小编为大家详细介绍“linux rm的含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“linux rm的含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在linux中,rm全称“remove
2023-06-30

linux rc的含义是什么

本篇内容主要讲解“linux rc的含义是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux rc的含义是什么”吧!linux rc是runcom的缩写,也是“.cshrc”或“/et
2023-07-05

linux i686的含义是什么

本文小编为大家详细介绍“linux i686的含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“linux i686的含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
2023-03-24

linux i386的含义是什么

这篇文章主要介绍“linux i386的含义是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux i386的含义是什么”文章能帮助大家解决问题。在linux中
2023-04-14

linux kde的含义是什么

这篇文章主要讲解了“linux kde的含义是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux kde的含义是什么”吧!linux kde是一个用于
2023-04-22

linux中tmp的含义是什么

本篇内容主要讲解“linux中tmp的含义是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux中tmp的含义是什么”吧!linux中tmp指的是一个存储临
2023-03-10

linux中ll的含义是什么

这篇文章主要讲解了“linux中ll的含义是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux中ll的含义是什么”吧!在linux中,“ll”是“ls -l”命令的别名,ls命令用
2023-06-29

Linux中点的含义是什么

这篇文章主要介绍了Linux中点的含义是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Paul Brown 解释了 Linux shell 命令中那个不起眼的“点”的各种
2023-06-16

编程热搜

目录