1. 文件I/O

对于内核而言,所有打开的文件都通过文件描述符引用,内核不区分文本文件和二进制文件
open函数:O_RDONLY  O_WRONLY  O_RDWR
create函数:
close函数:关闭一个文件时还会释放该进程加在该文件上的所有记录锁
lseek函数:显式地为一个打开的文件设置其偏移量
每个打开的文件都有一个与其相关联的 "当前文件偏移量",用以度量从文件开始处计算的字节数,通常,读、写操作都从当前文件偏移量处开始,并使偏移量增加所读写的字节数
文件偏移量可以大于文件的当前长度,写该文件会在文件中形成一个空洞,文件中的空洞并不要求在磁盘上占用存储区。
 
read函数: 实际读到的字节数少于所要求读的字节数 的情况:
(1) 读普通文件时,在读要求字节数之前已达到了文件尾端,比如到达文件尾端之前还有30字节,而要求读100字节,那么下一次read会返回30字节,再下一次返回0
(2) 当从终端设备读时,通常一次最多读一行
(3) 当从网络套字节读时,网络中的缓冲机制可能造成返回值小于所要求读的字节数
(4) 当从管道或FIFO读时,例如 管道包含的字节数少于所需的数量,那么read将只返回实际可用的字节数
(5) 当某一信号造成中断,而已经读了部分数据量时
 
write函数:其返回值要与所写的字节数相同,否则表示出错
 

2.文件共享

内核使用三种数据结构来表示打开的文件
 
(1)每个进程在进程表中都有一个记录项,包含文件描述符表,有一个文件描述符标志和指向文件表项的指针
(2)内核为所有打开文件维护一张文件表,包含 文件状态标志、当前文件偏移量、指向该文件V节点表项的指针
(3)每个打开文件都有一个v节点结构,Linux使用inode节点结构,记录文件的元信息,对应于fstat函数
 
 
一个给定的文件只有一个v节点表项
每个进程都有它自己对该文件的当前偏移量
 

3. dup和dup2函数:复制一个现存的文件描述符

函数返回的新描述符与输入参数描述符共享同一个文件表项
 

4.fcntl函数

fcntl函数可以改变已打开的文件的性质
int fcntl(int fd, int cmd, ...)
fcntl函数有5中功能:
(1)复制一个现有的描述符 (cmd = F_DUPFD)
(2)获取/设置文件描述符标记 (cmd = F_GETFD, F_SETFD)
(3)获取/设置文件状态标志 (cmd = F_GETFL, F_SETFL)
(4)获取/设置异步I/O所有权 (cmd = F_GETOWN, F_SETOWN)
(5)获取/设置记录锁 (cmd = F_GETLK, F_SETLK, F_SETLKW)

APUE 学习笔记(二) 文件I/O的更多相关文章

  1. APUE学习笔记3_文件IO

    APUE学习笔记3_文件IO Unix中的文件IO函数主要包括以下几个:open().read().write().lseek().close()等.这类I/O函数也被称为不带缓冲的I/O,标准I/O ...

  2. linux学习笔记二-----文件权限管理

    一.分析文件权限(ln -s 文件名 快捷方式名 用来创建文件的快捷方式,下方ll查看信息时会在第一个字符处显示l) [hjp@bogon ~]$ ll total 4 drwxrwxr-x. 2 h ...

  3. APUE学习笔记3——文件和目录

    1 简介 之前学习了执行I/O操作的基本函数,主要是围绕普通文件I/O的打开.读或写.下面继续学习Unix文件系统的其他特征和文件的基本性质.我们将从stat函数开始,了解stat结构所代表的文件属性 ...

  4. Linux System Programming 学习笔记(二) 文件I/O

    1.每个Linux进程都有一个最大打开文件数,默认情况下,最大值是1024 文件描述符不仅可以引用普通文件,也可以引用套接字socket,目录,管道(everything is a file) 默认情 ...

  5. APUE 学习笔记(三) 文件和目录

    1. 文件类型 文件类型信息包含在 struct stat 里的 st_mode 成员 (1)普通文件,unix内核并不区分文本文件和二进制文件 (2)目录文件,这种文件包含了其他文件的名字以及指向这 ...

  6. APUE学习笔记2——文件I/O

    1 引言 本章首先讨论Unix系统中大多数文件I/O最常用的5个系统函数:open.read.write.lseek以及close. 本章所说明的函数又被成为不带缓冲的I/O,不带缓冲是指每个read ...

  7. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

  8. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  9. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

随机推荐

  1. 《毛毛虫组》【Alpha】Scrum meeting 5

    第二天 日期:2019/6/18 1.1 今日完成任务情况以及遇到的问题. 今日完成任务情况: 出入库货物年统计模块设计及系统的测试运行: (1)对数据库表--tb_InStore和tb_OutSto ...

  2. tomcat - CPU高占用问题记录

    先查询进程 top 再根据进程号,查出进程的线程 ps p 3036 -L -o pcpu,pid,tid,time,tname,cmd 得到最高使用率CPU的线程TID,转换成16进制 printf ...

  3. python-下拉框

    首先,从selenium.webdriver.support.ui里调用Select类,如下: 其次,找到下拉框元素,再找下拉框里要最终选择的元素,如下: 注意:调用Select类后,不必再加clic ...

  4. Bootstrap历练实例:大小Well

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  5. 控件中添加的成员变量value和control的区别

    control型变量是这个控件所属类的一个实例(对象)可以通过这个变量来对该控件进行一些设置.而value只是用来传递数据,不能对控件进行其它的操作.control型变量可以获得控件的实例,通过这个变 ...

  6. Python中类的声明,使用,属性,实例属性,计算属性及继承,重写

    Python中的类的定义以及使用: 类的定义: 定义类 在Python中,类的定义使用class关键字来实现 语法如下: class className: "类的注释" 类的实体 ...

  7. Python爬虫,爬取实验楼全部课程

    目的: 使用requests库以及xpath解析进行实验楼所有课程,存入MySQL数据 库中. 准备工作: 首先安装,requests库,lxml库,以及peewee库.在命令行模式,使用以下命令. ...

  8. python多进程并发进程池Pool

    简介: python中的多进程主要使用到 multiprocessing 这个库.低版本python这个库在使用 multiprocessing.Manager().Queue时会出问题,建议大家升级 ...

  9. 前端之bootstrap

    一.响应式介绍 众所周知,电脑.平板.手机的屏幕是差距很大的,假如在电脑上写好了一个页面,在电脑上看起来不错,但是如果放到手机上的话,那可能就会乱的一塌糊涂,这时候怎么解决呢?以前,可以再专门为手机定 ...

  10. Linux和 Mac下git pull/push 免输入密码和账号

    linux下面可以直接创建.git-credential文件,命令如下: 创建文件,进入文件,输入内容: cd ~ touch .git-credentials vim .git-credential ...