UNIX环境高级编程第三章文件I/O 读后笔记

2024-02-05 22:48

本文主要是介绍UNIX环境高级编程第三章文件I/O 读后笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

昨天读了UNIX环境高级编程第三章:文件I/O,现记录一下读书笔记。
   先澄清一个概念,文件描述符不是整个系统唯一的,而是对于进程来说唯一的。
   该章说明的函数都是不带缓冲的I/O。它们都是属于POSIX和UNIX的组成部分,而不是ISO C的组成部分。该章介绍了open(),create(),read(),write(),来seek(), 等常用文件操作函数。需要注意的是文件模式mode_t中有许多常量,将这些常量按位或可以设置文件属性。在文件共享方面,每个进程都有一个打开文件描述符表,该表中记录所有打开文件的文件指针,该文件指针指向一个文件表项,其中记录了文件状态标志、文件偏移量、V节点指针的结构。而V节点指针中包含了V节点信息、i节点信息、当前文件大小。V节点中包含了该文件类型、对该文件操作的函数指针等。
   接着说明了原子操作的概念以及如何避免读者、写着冲突。
   下面说明几组不太熟悉的函数:
  (1)dup和dup2函数
      dup和dup2函数复制一个现有的文件描述符,其具体操作是,在进程打开文件描述符表中增加一项,其中文件指针指向同一文件表项。所以,dup和dup2函数复制的文件描述符同原描述符具有相同的偏移和文件状态(读、写、添加)。dup与dup2不同的是,dup返回一个当前最小可用文件描述符数值,dup2指定一个数值返回。
  (2)sync、fsync和fdatasync函数
      大多数I/O函数都通过缓冲,这样可以有效减少磁盘读写次数。但是,这样会导致磁盘和缓冲区内容不一致的问题。为了解决这个问题,可以使用这一组函数。sync函数将所有修改过的缓冲区块排入磁盘写队列,然后返回,也就是说,并不是写入磁盘了,还得等会。fsync(int filedes)将指定文件排入写队列,并指导写入磁盘结束,然后返回。fdatasync函数类似fsync,但只影响文件数据部分,而fsync还会同步更新文件属性。(会影响文件什么属性呢??)
  (3)fcntl函数(file control)(出错则返回-1,成功则返回某值)
      函数原型:int fcntl(int filedes,int cmd, ...);
      针对diledes指定的文件,更改文件状态表项中的文件状态标志、获取文件状态标志。下面举例一些常量:O_RDONLY,O_WRONLY,O_RDWR,O_APPEND,O_NONBLOCK等。
  (3)ioctl函数
      本接并没有细细介绍此函数,按照个人的理解,主要用于控制底层I/O的参数,例如波特率等。
   下面说说/dev/fd目录,为了某些特殊需要,linux/unix提供了这个目录,此目录为每个进程映射此进程打开的文件,用文件描述符表示。

这篇关于UNIX环境高级编程第三章文件I/O 读后笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/682409

相关文章

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例