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. string 空值

    string str; string mystr = ""; 则 str == mystr;

  2. cocos2dx通过ndk编译c++库

    ndk编译c++库,然后通过jni调用实现重要代码封装,是安卓应用中最常用的技术,一方面可以将重要的代码实现隐藏,防止泄漏,也可以提高打包速度. ndk里面的sample文件夹中有很多实用的例子,其中 ...

  3. 解决xcode iOS真机调试正常,模拟器失败问题

    今天早上遇到xcode的真机可以调试,但是模拟器却爆出一大堆错,提示错误是没有找到引用的代码文件,真机和模拟器的配置都是一样的, 准确来说,应该是除了指令以外,其他都死一样的配置,所以大概是指令配置上 ...

  4. UICollectionView实现无限轮播

    #import "KGNewsController.h"#import "KGNewsCell.h"#import "KGNews.h"#i ...

  5. APP上线碰到的问题:Non-public API usage

    ①.Non-public API usage:The app references non-public symbols in XXXX: _UICreateCGImageFromIOSurface ...

  6. 洛谷 P3601 签到题

    https://www.luogu.org/problemnew/show/P3601 一道关于欧拉函数的题. 读完题目以后我们知道所谓的$aindao(x)=x- \phi (x) $. 对于x小的 ...

  7. (67)windows安装zabbix监控

    在windows下安装zabbix agent,方法非常简单.首先到zabbix官方下载windows版本agent,地址:http://www.zabbix.com/download.php,找到“ ...

  8. destoon修改笔记

    $EXT = cache_read('module-3.php');  $EXT,存放了module3的设置 后台模型管理,扩展模型 里设置.     1.admin.php 后台管理项目对应文件. ...

  9. 【php】 phpword下载文件问题

    这个问题是在 科锐国际 工作过程中发现的 word文档的名字(有汉字和空格)在windows系统上遍历是查不到文件的,但是在linux系统上市可以的压缩包里面的中文名word文档,如果出现汉字和空格, ...

  10. settings.py常规配置项

    settings.py常见配置项 1. 配置Django_Admin依照中文界面显示 LANGUAGE_CODE = 'zh-hans' 2. 数据库配置(默认使用sqlite3) 使用MySQL的配 ...