《Linux系统编程(第2版)》——2.6 关闭文件
本节书摘来自异步社区《Linux系统编程(第2版)》一书中的第2章,第2.6节,作者:【美】Robert Love著,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.6 关闭文件
当程序完成对某个文件的操作后,可以通过系统调用close()取消文件描述符到对应文件的映射:
系统调用close()会取消当前进程的文件描述符fd与其关联的文件之间的映射。调用后,先前给定的文件描述符fd不再有效,内核可以随时重用它,当后续有open()调用或creat()调用时,重新把它作为返回值。close()调用在成功时返回0,出错时返回-1,并相应设置errno值。close()的用法很简单:
值得一提的是,关闭文件操作并非意味着该文件的数据已经被写到磁盘。如果应用希望保证关闭文件之前数据已经写入磁盘,它需要使用先前在2.4节中讨论的同步选项。
关闭文件虽然操作上很简单,但是也会带来一些影响。当关闭指向某个文件的最后一个文件描述符时,内核中表示该文件的数据结构就释放了。如果释放了数据结构,会清除和文件相关的索引节点的内存拷贝。如果已经没有内存和索引节点关联,该索引节点也会被从内存中清除(出于性能考虑,也可能会保存在内核中,但也可能不需要)。如果文件已经从磁盘上解除链接,但是解除之前还一直打开,在文件被关闭并且其索引节点从内存中删除之后,该文件才会真正从物理磁盘上删除。因此,调用close()可能会使得一个已解除链接的文件最终从磁盘上删除。
错误码
一个常见的错误是没有检查close()的返回值。这样做可能会遗漏严重错误,因为延迟操作相关的错误可能到了后期才出现,而close()的返回值早就给出了这些错误信息。在失败时,有很多可能的errno值。除了EBADF(给定的文件描述符不合法),最重要的错误码是EIO,表示底层I/O错误,该错误很可能和实际的close操作并不相关。如果忽略出现的错误,在合法情况下,文件描述符总是关闭的,而且相关的数据结构也都释放了。
close()调用绝不会返回EINTR,虽然POSIX标准允许。Linux内核开发者可能很清楚,返回EINTR并不合适。
《Linux系统编程(第2版)》——2.6 关闭文件相关推荐
- linux目录统计编程,linux系统编程----统计一个目录下的普通文件个数
主要是为了统计linux系统下一个指定目录下面的普通文件个数,运用目录操作的一些函数,配合递归调用来实现该功能. 首先介绍一下函数原型: 打开一个空目录 DIR *opendir(const char ...
- Linux系统编程:树莓派 ds18b20温度获取(文件IO相关操作)
文章目录 问题 解答 linux文件io操作文件夹 1.opendir() 2.readdir() 3.closedir() 4.open() 5.read()函数 问题 当树莓派配置好ds18b20 ...
- Linux系统编程:获取指定目录下指定文件类型的数量
分析 编程实现对指定目录下的指定文件类型数量的统计.这里涉及到对目录文件的打开和对目录文件下的文件的遍历. 这里主要用的2个库函数,打开目录的 opendir函数,readdir函数.对这2个库函数不 ...
- Linux系统编程【文件IO、进程、进程间通信、信号、线程、互斥】
linux系统编程 个人通过学习,手打了一份48000字的Linux系统编程的笔记,包含了[文件IO.进程.进程间通信.信号.多线程.互斥]等知识点,并给出了大量的代码案例对每个重要的知识点进行了代码 ...
- Linux系统编程总结
day2 vim的三种工作模式 命令模式 vi hello.c zz 保存退出 2.编辑模式 i a o s (有大写)可以写东西 3.末行模式: 文本和末行模式不能直接切换 要切换回命令模式 再到末 ...
- Linux系统编程——进程基础知识
Linux系统编程--进程基础知识 1.程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁-) 进程,是一个抽象的概念,与操作系统原理联系紧密.进程 ...
- Linux系统编程及应用——ubuntu环境下
Linux系统编程及应用--ubuntu环境下 程序由业务逻辑和系统访问两部分构成的.其中,业务逻辑是根据业务需求,按照设计好的逻辑规则,处理信息,与系统(平台)无关的:而系统访问则是利用操作系统所提 ...
- Linux系统编程-基本命令
Linux系统编程-基本命令 目录 1.学习目标 2.Linux/Unix操作系统简介 2.1 Linux操作系统的目标(了解) 2.2 Linux操作系统的作用(了解) 2.3 Unix家族 (了解 ...
- 【Linux】Linux系统编程(入门与系统编程)(一)(环境搭建、常见指令以及权限理解)
目录 linux系统编程 : 1.推动技术进步的基本模式 2.理解操作系统的发展 Linux 背景介绍 UNIX发展的历史: Linux发展历史 开源 Linux的发行版本: a.技术角度 b.商业化 ...
最新文章
- 【转载】C#中StreamReader读取中文文本出现乱码的解决方法
- zabbix如何监控WEB应用性能
- 【LOJ】#2084. 「NOI2016」网格
- gcc - lm的含义
- iUAP云运维平台v3.0全面支持基于K8s的微服务架构
- 计算机网络按拓扑结构可分为三种基本型,2012年计算机三级网络技术基本概念与名词解释(3)...
- 烂泥:高负载均衡学习haproxy之安装与配置
- kali安装有道词典
- 考研复试问题之数据库概论
- python3基础教程pdf下载-《Python基础教程》(第3版)pdf电子书百度网盘下载
- 【C++】多线程同步
- python制表符的作用_Python制表符是什么
- 〖产品思维训练白宝书 - 产品思维认知篇⑤〗- 学习 [产品思维] 需要做哪些准备?
- 01 | Linux详细简介
- 系统卡顿有服务器硬件的原因,服务器出现卡顿,一般是这个3个原因!
- 如何在忙碌之余学习数据科学?
- 爬虫正则匹配固定长度的数字
- Prescan-行人识别
- 微信扫描二维码自动跳转到app下载页面(安卓跳转默认浏览器 苹果跳转苹果商店App Store)
- WPF Prism框架之Dialog