Linux文件IO基础

文件IO操作函数

open

需要包含的头文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

原型

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
flags取值:
以下三个标志只能选择其一,不能同时选择多个
O_RDONLY 只读打开
O_WRONLY 只写打开
O_RDWR   读写打开
以下的标志可以以|位或的形式同时选择
O_APPEND 追加
O_CREAT  如果文件不存在,则创建,需要第三个参数mode指定权限
O_EXCL   配合O_CREAT可以测试文件是否存在,如果已经存在则会出错,不存在则创建
O_TRUNC  以只写或读写方式打开,文件长度会被截断为0
O_NOCTTY 指的是终端设备,该标志表示不把该设备用于控制终端
O_NONBLOCK 非阻塞的方式打开
O_SYNC      每次write写都会等待物理IO完成
mode的取值:
可以用数字表示,如07770766等
可读 R   数值为4
可写W   数值为2
可执行X 数值为1

read

原型

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);

write

原型

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);

lseek

原型

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
whence取值:
SEEK_SET:表示文件起始位置
SEEK_CUR:表示文件当前位置
SEEK_END:表示文件末尾位置

dup/dup2

原型

#include <unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);

fsync

原型

#include <unistd.h>
 int fsync(int fd);//同步等待完成数据和属性的更新
 int fdatasync(int fd);//只等待数据的更新完成

进程表记录项中的描述符表、文件表项、inode节点之间的关系

进程中打开文件时的内核数据结构如下图:
文件的内核数据结构

两个进程打开同一文件的内核数据结构如下图:
两个进程打开同一个文件
每个进程的打开的文件描述表都是独立的,从上图可以看出,不同的两个进程可以同时打开同一个文件,这两个进程会各自维护不同的文件表项,所以对于同一个文件,不同的进程可以有它自己的offset偏移量。而这两个文件表项的v节点指针指向的是同一v节点表,这个v节点表包含了真正指向文件内容数据的指针。

还有其他一些文件IO相关的知识点,后续有时间再补充记录。
THE END!

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值