前言
如何读取文件?文件操作跟把大象放进冰箱是一样的。打开文件、写入内容、关闭文件。文件操作可以用linux提供的open、read、write、close等函数。因此实现文件复制的流程就是:打开文件–>读取源文件内容–>将内容写入目的文件–>关闭文件。
open()函数
open()函数用来打开一个文件,返回一个文件描述符。linux下一切皆文件,默认打开标准输入、标准输出、错误输出,分别对应文件描述符0、1、2。当打开一个文件时,文件描述符编号依次从小到大,也就是从3开始(0、1、2没有关闭的情况下)。
open()函数参数说明:pathname:文件的路径名,flags:打开方式(只读、读写等)
mode(可选参数):给文件赋予相应权限,如0644,也可以用宏,具体参考手册(linux输入:man 2 open)。
creat()函数用于创建文件,一般不用。因为可以用open()函数在flags参数中加上CREAT,表示若文件不存在则创建。多个选项相或实现。
read()函数
同样,我们来看看linux手册中的函数原型。read() 从文件描述符 fd 中读取 count 字节的数据并放入从 buf开始的缓冲区中.
fd:文件描述符
buf:内容缓冲。一般定义一个缓冲数组存放读取的内容,将数组名带入参数。
count:要读取内容的大小。用数组存放内容时,一般来说count就是数组的大小
返回值:返回实际读取到的字节数,0表示读完
write()函数
write 向文件描述符 fd 所引用的文件中写入 从 buf 开始的缓冲区中 count 字节的数据.
write()和read()操作是差不多的,形参都是相同的,函数名不同而已。
fd:文件描述符
buf:要写入的内容
count:要写入内容的大小
返回值:返回实际写入的大小
close()函数
close()就很简单了,功能是关闭一个文件,将文件描述符传递进去,然后调用。
返回值:0表示成功 -1表示出错
文件复制
打开文件–>读取源文件内容–>将内容写入目的文件–>关闭文件
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#define bufsize 1024
int main(){
//打开文件
int src = open("./test",O_RDONLY);//以只读形式打开test文件,返回一个文件描述符
int dest = open("./copy_test",O_RDWR|O_CREAT,0644);//读写方式打开,644是权限
//读取test内容,写入copy_test
char buf[bufsize];//定义字符缓冲数组,用于存放读取到的文件内容
int read_size,write_size = 0;
while((read_size = read(src,buf,bufsize))!= 0)//返回0说明读取完毕
{
write_size += write(dest,buf,read_size);
}
printf("写入文件内容大小为:%d\n",write_size);
//关闭文件
close(src);
close(dest);
return 0;
}