使用到的函数说明
打开文件
int open(const char *pathname, int flags,mode_t mode);
需要的头文件:
#include
#include
#include
返回值类型是int 型的文件描述符
成功:>=0的整数
失败:-1
参数
第一个参数:为文件地址,要打开的文件路径
第二个参数:为文件类型:
O_RDONLY(以只读形式打开文件)
O_WRONLY(只写形式打开文件)
O_RDWR(读写形式打开文件)
额外参数(较常用):可选可不选
O_APPEND:以追加的方式写入内容 --> write()
O_CREAT: 如果文件不存在,则会创建。如果flags中有O_CREAT,那么就要写mode这个参数。如果flags没有O_CREAT,那么mode参数可以忽略!
O_TRUNC:如果访问的文件已经存在,则会清空
O_NOCTTY:使得终端脱离控制 --> 串口编程
获取文件大小
off_t lseek(int fildes, off_t offset, int whence);
需要的头文件
#include
#include
返回值
成功:返回目前的读写位置(即可以获得文件的大小)
失败:-1
参数说明
第一个参数(fildes):文件描述符,即用open函数获取到的
第二个参数(off_t offset):相对于第三个参数偏移了多少个字节
第三个参数(whence):文件指针位置
SEEK_SET 参数offset 即为新的读写位置.(设置指针位置)
SEEK_CUR 以目前的读写位置往后增加offset 个位移量.(指针在当前位置)
SEEK_END 将读写位置指向文件尾后再增加offset 个位移量. (指针在文件末尾)
当whence值为SEEK_CUR 或SEEK_END 时, 参数offet 允许负值的出现.
读取文件
ssize_t read(int fd, void *buf, size_t count);
需要的头文件:
#include
返回值:
成功:从文件中读取的字节数
失败:-1
参数:
第一个参数(fd):被读取的文件的文件描述符(即用open函数打开文件时获取到的文件描述符)
第二个参数(buf):读取到的数据存放在这个变量中
第三个参数(count):读取的数据字节数
文件的写入
ssize_t write(int fd, const void *buf, size_t count);
需要的头文件:
#include
返回值:
成功:已经写入文件的字节数
失败:-1
参数说明:
第一个参数(fd):文件描述符(即用open函数打开文件时获取到的文件描述符)
第二个参数:要写入的数据
第三个参数:写入数据的字节数
关闭文件
int close(int fd);
需要的头文件:
#include
参数:int型的文件描述符
返回值:
成功:0
失败: -1
用系统IO实现文件的读取
//用系统IO实现文件的读取
#include
#include
#include
#include
#include
int main(int argc, char** argv[])
{
//第一步打开文件
int fd = open("./1.txt",O_RDONLY); //以只读的形式打开当前目录下的1.txt文件
//第二步:获取文件大小
int len = lseek(fd,0,SEEK_END); //先将指针偏移到文件末尾,获取文件末尾指针位置,即可获得文件大小
//第三步:将文件指针偏移到文件开头
lseek(fd,0,SEEK_SET);
//第四步:创建一个缓冲区来存放读取到的数据
char buf[len]; //创建一个大小与要读取的文件大小相等的字符数组来存放读取到的数据
//第五步:读取数据,将读取到的数据存放在数组中
read(fd,buf,len);
//第六步:打印读取到的数据
for(int i = 0; i < len; i++)
{
printf("%c",buf[i]);
}
//第七步:关闭文件
close(fd);
}
用系统IO将数据写入文件
//用系统IO将数据写入文件
#include
#include
#include
#include
#include
int main(int argc, char** argv[])
{
//第一步:打开文件
int fd = open("./1.txt",O_WRONLY | O_CREAT | O_TRUNC, 0777); //以只写的形式打开文件,文件存在则清空,不存在则创建
//第二步:将要写入的数据存放在字符串中
char* buf = "helloworld";
//第三步:获取字符串大小
int len = strlen(buf);
//第四步:写入数据到文件中
write(fd,buf,len);
//第五步:关闭文件
close(fd);
}
用系统IO拷贝文件
//用系统IO拷贝文件
#include
#include
#include
#include
int main(int argc, char** argv[])
{
//第一步:打开文件
int fd1 = open("./1.txt",O_RDONLY); //以只读的形式打开当前目录下的1.txt文件
int fd2 = open("./2.txt",O_WRONLY | O_CREAT | O_TRUNC, 0777); //以只写的形式打开文件,文件存在则清空,不存在则创建
//第二步:获取文件大小
int len = lseek(fd1,0,SEEK_END); //先将指针偏移到文件末尾,获取文件末尾指针位置,即可获得文件大小
//第三步:将文件指针偏移到文件开头
lseek(fd1,0,SEEK_SET);
//第四步:创建一个缓冲区来存放读取到的数据
char buf[len]; //创建一个大小与要读取的文件大小相等的字符数组来存放读取到的数据
//第五步:读取数据,将读取到的数据存放在数组中
read(fd1,buf,len);
//第六步:将缓冲区中的数据写入2.txt文件
write(fd2,buf,len);
//第七步:关闭文件
close(fd1);
close(fd2);
}