C语言——Linux项目:文件复制命令的实现
来源:互联网 发布:用mac输入英文破折号 编辑:程序博客网 时间:2024/06/05 21:11
#include <stdio.h>#include <sys/stat.h>#include <fcntl.h>#define BUFSIZE 512void copy(char *from,char *to){ //定义两个整型变量fromfd,tofd int fromfd = -1,tofd = -1; //定义ssize_t类型变量nread ssize_t nread; //定义缓冲区buf,大小512 char buf[BUFSIZE]; //以只读的方式打开from指向的文件 //open()当打开文件成功时,返回一个文件描述符;当打开失败时,返回-1,并且errno为错误码 if((fromfd = open(from,O_RDONLY)) == -1) { //将出错原因打印出来 perror("open"); //返回 exit(1); } //以只写方式打开文件描述符为to的文件 //O_CREAT:如果to指向的文件不存在就创建该文件 //O_TRUNC:如果to指向的文件是已经存在的普通文件,并且打开的方式是可写的,就将该文件的长度截为0。对于FIFO文件或者终端设备文件,该方式被忽略 //如果文件存在,则以只读方式打开,并将文件清空;否则创建该文件 if((tofd = open(to,O_WRONLY | O_CREAT | O_TRUNC,S_IRUSR | S_IWUSR )) == -1) { //将出错原因打印出来 perror("open to"); //返回 exit(1); } //将文件描述符为fromfd的文件中读取长度为buf的字节的数据并放入buf缓冲区中 //read():执行成功时,返回的是实际读回数据的字节数;当失败时,返回-1,并且errno为错误码 nread = read(fromfd,buf,sizeof(buf)); //当nread>0,也就是还有数据没读完的时候,继续循环 while(nread > 0) { //将buf缓冲区中的nread个字节的数据写入文件描述符为tofd的文件中 //write():执行成功时,返回的是实际写入数据的字节数;当失败时,返回-1,并且errno为错误码 //当写入的数据和要写入的数据不符的时候 if(write(tofd,buf,nread)!=nread) { //提示写入出错 printf("write %s error\n",to); } //重新赋值nread,以便继续循环 nread = read(fromfd,buf,sizeof(buf)); } //如果nread==-1,说明read执行失败 if(nread == -1){ //提示写入出错 printf("write %s error\n",to); } //关闭文件描述符为fromfd的文件 close(fromfd); //关闭文件描述符为tofd的文件 close(tofd); //返回 return;}//主函数定义main(int argc,char **argv){ //如果传入的参数不等于3时(argc不等于3) if(argc!=3) { //给出程序执行时的提示 printf("Usage:%s fromfilename tofilename\n",argv[0]); //返回 exit(1); } //调用copy()函数,将传入的第一个参数对应的文件复制为第二个参数的文件 copy(argv[1],argv[2]);}
阅读全文
1 0
- C语言——Linux项目:文件复制命令的实现
- Linux下C语言实现文件复制
- linux下C语言实现文件复制
- 文件复制的C语言实现
- Linux文件复制cp命令的实现
- 【C语言】C语言实现文件内容的复制
- 【C语言】C语言实现文件内容的复制
- Linux 下 C 语言实现 Copy 复制命令
- C语言实现文件复制
- 文件复制 c语言实现
- 文件复制C语言实现
- C语言实现文件复制
- Linux C 文件复制的实现
- Linux下C语言实现多线程文件复制
- linux下c语言实现多线程文件复制
- linux下c语言实现多线程文件复制
- c语言 linux下文件i/o 实现文件的复制
- linux c实现文件复制
- CF contest 888 problem E 【思维 + 状压 + 中途相遇法(折半搜索)】
- 杭电2017新生赛1007-找方块
- 动态数据结构
- gRPC 在 Python中的应用
- hibernate_day03_09_多对多操作
- C语言——Linux项目:文件复制命令的实现
- 11AIncreasing Sequence
- 随便写点关于我的github仓库
- 6.7 接口参数
- 超大背包问题 (折半枚举)
- uml类图与代码
- BigDecimal、DecimalFormat工具类-浮点类型计算格式化-史上最全=_=
- java日常学习:事件(简要版)
- application使用@符合问题:'@' that cannot start any token. (Do not use @ for indentation)