linux下的文件操作之文件复制
程序员文章站
2022-06-10 11:13:07
...
知识点提炼:
- open(const char *pathname,int flags)函数的使用,
第一个参数为文件所在路径以及文件名,
第二个参数为的打开文件的方式,有三种O_RDONLY.(只读),O_WRONLY(只写),O_RDWR(读写),以“|”连接添加新功能,常用功能 有O_APPEND(以追加的方式打开文件),O_CREAT(若无该文件,就创建文件) - main()函数参数的使用 main(int argc,char **argv)
argc代表参数的个数,
argv为二级字符串指针,即为多个字符串数组,a也就是说,argv[0]代表其第一个参数,argv[1]代表其第二个参数,arg[2]代表其第三个参数,以此类推 - lseek()函数的使用,
第一个参数为文件描述符,
第二个参数为偏移量,
第三个参数(SEEK_CUR,SEEK_SET,SEEK_END),返回值为当前位置到开头的字节数
以下为实现文件复制的代码: -
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> #define BUFFER_SIZE 15 //文件复制 int main(int argc,char **argv) { int from_fd ,to_fd; int file_len=0;//记录文件的长度 int ret=1;//记录读文件的字节数 char buffer[BUFFER_SIZE]; if(argc !=3)//参数个数 { printf("argc not enough\n"); exit(0); } if((from_fd=open(argv[1],O_RDONLY|O_CREAT))==-1) { printf("open %s failed\n",argv[1]); exit(0); } if((to_fd=open(argv[2],O_WRONLY|O_CREAT))==0) { printf("open %s failed\n",argv[2]); exit(0); } //lseek的使用 file_len=lseek(from_fd,0,SEEK_END);//读出文件行数 lseek(from_fd,0,SEEK_SET);//将文件指针放回文件起始位置 printf("this file has %d bytes\n",file_len); //进行文件的复制 while(ret) { ret=read(from_fd,buffer,BUFFER_SIZE);//读文件中的内容 if(ret==-1) { printf("read error"); exit(1); } write(to_fd,buffer,ret);//将读到的数据写到文件里 file_len-=ret; bzero(buffer,BUFFER_SIZE);//清空缓冲区 } close(from_fd); close(to_fd); exit(0); }
编译以及测试代码
//编译文件 gcc copy_file.c -o copy //执行文件 sudo ./copy from.c to.c //测试文件 //若文件内容相同则无输出 sudo diff from.c to.c
注意:应保证from.c里有内容