没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
操作系统编程
页表是由操作系统还是CPU实现的?单进程需不需要锁?
文件系统
标准I/O及流
进程
Linux发展史
文件、目录的操作方法,常用的文件I/O
UNIX操作系统
MINIX操作系统
GNU计划
POSIX标准
Internet网络
前六个参数通过压栈,rdi rsi rdx rcx r8 r9
程序编译阶段
预处理
链接
子主题
汇编
1.宏替换
2.头文件张开
3.
文件的操作
文件IO
文件和目录
文件的基本操作
IO效率
文件共享
其他重要IO函数
open 打开
creat 创建
lseek 定位
read 读
writer 写
open 函数
什么是文件描述符 已打开文件的索引
strerro 不能给两个进程同时使用
信号
线程
知识点
- 线程独有:寄存器 栈
- TCB:线程控制块
- 进程是资源的载体
- create 考点:执行打开创建
- lseek 考点:
- 原子操作:做就做完,不做就全不做
- 页表:是在硬件中通过处理器和内存管理单元实现
-
creat 函数
- 成功:只写打开的文件描述符
- 出错:-1
参数
pathname: 要打开或者创建的文件名
文件打开模式标记
其他文件标志
O_RDONLY:只读打开
O_WRONLY:只写打开
O_RDWR:读写打开
O_APPEND 每次写的时候都添加到文件尾部
O_TRUNC 若此文件存在,并以读写或只写打开,则文件长度为0
O_CREAT 若文件不存在,则创建该文件,open函数需要第三个参数,用于指定文
件的访问权限位
O_EXCL 若同时指定了O_CREAT标志,而文件已经存在,则会出错,可用于测试文
件是否存在
返回值 整型数据
- 成功:文件描述符已打开文件表的索引
- 失败:-1
文件描述符
思考
文件描述符的本质是什么? 非负整数索引值
通过文件描述符怎么样能找到需访问的文件?
从进程中的PCB中读取files指针,找到对应文件表files_struct,再通过文件描述符
找到数组中对应的文件指针,指向文件进行操作
进程打开文件的内核数据结构
索引节点
要点
- 存储在磁盘上
- 当需要时,调入内存,填写VFS的索引节点(即inode结构)
- 每个文件都对应了一个索引节点
- 通过索引节点号,可以唯一的标识文件系统中的指定文件
unsigned long i_no:索引节点号
umode_t i_mode:文件类型访问权限
uid_t i_uid:文件拥有者ID
gid_t i_size:文件拥有者所在组ID
off_t i_size:文件大小
time_t i_atime:文件最后访问时间
time_t i_mtime:文件最后修改时间
知识点 0、1、2分别表示 标准输入、标准输出、标准出错
perror 函数 作用 根据当前的errno,输出一条出错信息
作用 用于创建一个新文件
参数
pathname:要创建的文件名(包含路径信息)
oflag:用于指定文件打卡模式、标志信息
mode:讨论文件的访问权限位时分析
返回值
lseek 函数
作用 用于修改当前文件偏移量
参数
- 偏移量的作用:规定了从文件什么地方开始进行读写操作
- 读写操作结束时,会使文件偏移量增加读写的字节数
- 当打开一个文件时,偏移量被设置为0
filedes:open/crate函数返回的文件描述符
offset:相对偏移量,结合whence才能算出真正偏移量。off_t:多少位数据类型
Whence:SEEK_SET / SEEK_CUR / SEEK_END
距文件开始处的offset个字节 / 当前文件偏移量 + offset / 当前文件长度 + offset
返回值
- 成功:新的文件偏移量
- 出错:-1
read 函数
作用 用于从文件中读出数据
参数
fd:文件描述符
buff:指向缓冲区,用于存放从文件读出的数据
nbytes:需要从文件中读出的字节数
返回值
- 成功:从文件中实际读到的字节数,读到文件结尾返回0
- 出错:-1
要点 通常read读出的字节数都小于要求读出的字节数
write 函数
作用 用于向文件里面,写入数据
参数
fd:文件描述符
buff:指向缓冲区,存放需要写入的文件数据
nbytes:需要写入文件的字节数
返回值
- 成功:实际写入文件的字节数
- 出错:-1
出错的原因:磁盘满了、没有访问权限、超过了给定进程的文件长度限制
close 函数
作用 用于关闭一个已打开的文件
参数 filedes:文件描述符
返回
- 成功:0
- 出错:-1
要点
- 关闭文件时,会释放进程加在该文件的上的所有记录锁
- 内核会对进程打开文件表、文件对象、索引节点等结构进行修改,释放相关资源
- 当进程退出时,会关闭当前所有已打开的文件描述符
产生原因
- Linux文件系统采用的是预读技术
- 读取的时候,系统会试图读取更多数据,并假设应用程序很快就会读这些数据
- 当BUFFSIZE增加到一定程度后,预读就停止了
改进
- 尽量使磁头顺序移动
- 利用缓存,减少磁盘IO、read/write调用次数(因为会陷入内核)
- 有时轮询比中断好
种类
不同进程打开同一个文件
父子进程共享文件对象的情况
同一个进程打开不同的文件
同一个进程内的共享
同一个进程内线程的共享
不同进程打开不同的文件
dup 函数
作用 用于复制一个已经存在的文件描述符
参数 filedes:文件描述符
返回值
- 成功:新的文件描述符
- 出错:-1
sync、fsync、fdatasync
sync:将所有修改过的缓冲区排入写队列,然后就返回,针对所有修改过的缓冲区
fsync:只对文件描述符filedes指定的单一文件起作用,等待写磁盘操作结束后才
返回
fdatasync:只影响文件的数据部分,fsync影响文件数据还更新文件属性
fcntl 函数
作用 用于改变已经打开文件的性质
参数
filedes:已打开文件的描述符
cmd:复制现存描述符/设置文件描述符标记/设置文件状态标志/设置异步IO信号接
收进程/设置记录锁
返回值
- 成功:值依赖第二个参数cmd
- 出错:-1
ioctl 函数 IO操作的杂物箱
ext2文件系统在磁盘的组织
stat、fstat、lstat 函数
文件的基本性质
修改文件属性的函数
硬连接与符号链接
目录操作
磁盘布局
- 超级块:用于灾难恢复,存放文件系统的基本信息
- 组描述符:指向块位图,指向索引节点位图,指向索引节点表
- 块位图:表示某bit对应的数据块有无被占用
- 索引节点位图:表示某bit对应的索引节点有无被占用
- 索引节点表:由若干个索引节点组成,一个索引节点对应一个文件,每个索引节
点都有个编号
stat 函数
作用 获取有关文件的信息结构
参数
pathname:文件名
buf:将pathname对应的文件信息填入buf指向的stat结构中
fstat、lstat 函数 用于获取有关文件的信息结构
文件类型
用户ID和组ID
文件访问权限
新文件和目录的所有权
文件时间
- 普通文件
- 目录文件
- 字符特殊文件
- 块特殊文件
- FIFO文件
- 套接口文件
- 符号链接
- 唯一标识符ID
- 文件所有者相关
- 实际用户ID和实际组ID
- 有效用户ID和有效组ID
- 保存的设置用户ID和保存的设置组ID
理解
针对不同用户
- 文件所有者
- 与文件所有者同组的用户
- 非同组的用户
文件访问的控制权限
控制读、写、执行权限
新文件的所有者ID:创建该文件的进程的有效用户ID
新文件的组ID:创建该文件的进程的有效组ID / 新文件所在目录的组ID
st_atime:文件数据的最后访问时间
st_mtime:文件数据的最后修改时间
st_ctime:i节点状态的最后更改时间
utime:用于更改一个文件的访问时间、修改时间
access
umask
chmod和fchmod
chown、fchown和lchown
truncate和ftruncate
资源评论
weixin_46981554
- 粉丝: 2
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功