UNIX环境高级编程-读书笔记-文件操作(二)

linux系统 下的文件的操作

1.在linux下面,我们使用文件描述符来唯一的标识一个文件
注意:在一个进程中,他是唯一的标识已经打开的文件
是一个非负的整数
分配的规则是最小的且未被占用的

2.在一个进程中默认打开的三个文件是
stdin
stdout
stderr
他们三个的文件描述符分别是 0 1 2
3.打开文件
int open(const char *pathname, int flags);
parhname 要打开的文件的路径【可以是相对路径或者是绝对路径】
flags 打开的方式
O_RDONLY 只读
O_WDONLY 只写
O_RDWR 读写
除了这三种以外,还有一些配合使用的;但是注意上面的三种有且只能有一个
其他的都是和这三个配合使用,书写是使用或运算
O_CREAT 如果文件不存在,就创建此文件
O_TRUNC 如果文件存在,就把次文件清空
O_APPEND 如果文件存在,那么只在次文件的后面追加
O_EXCL 和O_CREAT一起使用,如果文件已经存在,那么打开失败,对应的errno的值会设定为EEXIST

4.文件定位
off_t lseek(int fd, off_t offset, int whence);

fd 文件描述符
offset 偏移量
whence 偏移位置

说明:偏移量的大小是字节 可以为正可以为负
为负数就是相对偏移位置往前
为正数就是相对偏移位置往后

偏移的位置:
SEEK_END 文件的结尾
SEEK_SET 文件的开始
SEEK_CUR 当前位置
举例:
lseek(fd, 1024, SEEK_SET);
就是相对文件fd 往后偏移1024个字节
lseek函数的返回值是偏移后的文件描述符
失败返回-1.

5.dup 和dup2
int dup(int oldfd);

复制一个文件描述符,返回值是新的文件描述符
新旧文件描述符共享偏移量,也就是说文件的偏移量是一样的

只有把两个描述符都关闭才能关闭文件

int dup2(int oldfd, int newfd);
这个函数也是复制文件描述符号,但是如果oldfd已经被占用的化,就先关闭他,然后在复制

6.文件映射
void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);

这个函数是对文件进行一个映射

addr NULL
lenth 要映射多大【字节】
prot 你映射的这段空间的访问的权限
PROT_READ|PROT_WRITE PROT_READ
没有只写权限 没有意义
flage MAP_SHARED
fd 你映射的文件描述符
offset 偏移量,指的是你要映射的文件偏移量,一般我们设置为0 ,表示从文件的开始进行映射
返回值: 一个指针

那我们对这个返回值 指针进行的操作,就是对这个文件进行的操作,

使用mmap函数的好处就是,减少了read,write的操作,是最快的i/o操作
缺点:映射的长度是固定的。【其实可以实现自动增长】

7.文件的读写
ssize_t read(int fd, void *buf, size_t count);
fd 文件描述符
buf 缓冲区
count 每次读的大小

就是从fd代表的文件中读取count大小的文件放在buf中

返回值就是每一次实际读的字节数
ssize_t write(int fd, const void *buf, size_t count);
fd 文件描述符
buf 缓冲区
count 每次写的大小

就是把buf 中的文件写到fd代表的文件

返回值是每一次实际写的字节说

说明:
这两个函数通常是配合使用,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值