序言
怎么读取文件?文件操作跟把小象放进冰柜是一样的。打开文件、写入内容、关闭文件。文件操作可以用linux提供的open、read、write、close等函数。因而实现文件复制的流程就是:打开文件–>读取源文件内容–>将内容写入目的文件–>关掉文件。
open()函数
open()函数拿来打开一个文件,返回一个文件描述符。linux下一切皆文件,默认打开标准输入、标准输出、错误输出,分别对应文件描述符0、1、2。当打开一个文件时,文件描述符编号依次从小到大,也就是从3开始(0、1、2没有关掉的情况下)。
open()函数参数说明::文件的路径名,flags:打开方法(只读、读写等)
mode(可选参数):给文件赋于相应权限,如0644,也可以用宏,具体参考指南(linux输入:man2open)。
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#include #include #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; }