底层文件IO
一、包含的头文件
<unistdio.h>
<fcntl.h>
二、文件描述符与open函数与close函数
1.文件描述符fd(自己命名用以区分不同的文件)
2.open函数(打开或创建一个文件)
用文件描述符去接收其返回值(int)
int fd = open(char *, flag, Authority);
第一个参数(char*):包含有文件名和路径
第二个参数(flag):打开文件的方式
flag | 功能 |
---|---|
O_RDONLY | 只读 |
O_WRONLY | 只写 |
O_RDWR | 可读可写 |
O_CREAT | 创建一个文件 |
O_EXCL | 测试文件是否存在 |
O_TRUNC | 打开一个文件并把文件内原来的内容删除 |
O_APPEND | 追加方式打开文件 |
第三个参数(Authoritty):创建文件的权限(打开一个文件不需要写此参数)
3.close函数
作用:关闭文件
三、write函数
int wr_ret = write(int fd, void *wr_buf, size_t count);
第一个参数(fd):文件描述符
第二个参数(wr_buf):向文件中写入的内容
第三个参数(count):将要向文件中写多少内容
返回值(wr_ret):实际所写的内容d
四、read函数
int rd_buf = read(int fd, void *rd_buf, size_t count);
第一个参数(fd):文件描述符
第二个参数(rd_buf):为即将读取的内容设置一个缓冲区
第三个参数(count):读多少个
返回值(rd_ret):实际所读取内容的字节数
五、lseek函数
lseek(int fd, off_t offset, int whence);
第一个参数(fd):文件描述符
第二个参数(offset):文件位置指针移动的位数
第三个参数(whence):将文件位置指针移动到何处
whence | 位置 |
---|---|
SEEK_SET | 文件的开头 |
SEEK_CUR | 文件位置指针的当前位置 |
SEEK_END | 文件末尾 |
函数的返回值:
成功:文件的当前位置
失败:-1
代码示例
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
int main()
{
//定义读写缓冲区
char wr_buf[] = "hello world!";
char rd_buf[128] = {0};
//定义文件描述符
int fd = open("1.txt", O_TRUNC|O_RDWR, 0777);
if(fd < 0){
printf("open error!\n");
return -1;
}
write(fd, wr_buf, sizeof(wr_buf));
lseek(fd, -6, SEEK_END);
read(fd, rd_buf, sizeof(rd_buf));
printf("%s\n", rd_buf);
//关闭文件
close(fd);
return 0;
}