模拟cp命令

cp命令:可将文件A复制给文件B。
**1.main()的参数:**判断argc参数是否为3,argv[0]=cp_name, argv[1]=source, argv[2]=destination;

2.Open():
头文件:#include<sys/types.h>
#include<fcntl.h>//声明调用open时使用的flag常量
#include<sys/stat.h>//声明mode_t

形式:int open(const char *pathname,int flags);
//int open( 打开的文件名,只读/只写/读写),失败返回-1
int open(argv[2],O_WDONLY|O_CREAT,0666)
//创建新文件,0666对所有用户均可读写,但不能执行

3.读source文件:
Read():
头文件:#include<unistd.h>
#include<sys/types.h>//声明ssize_t
形式:ssize_t read(int fd,void *buffer,size_t count);

//ssize_t read(文件描述符,缓冲区,需要读出的字节数),, ssize _t为signed int/long,出错返回负数,返回0表示读到文件尾(EOF),大于0时表示读入的数据大小

4.写入destination文件:
头文件:与read()系统调用相同;
形式:ssize_t write(int fd,const void *buffer,size_t count);

//ssize_t write(文件描述符,缓冲区,需要写入的字节数),, ssize _t为signed int/long,成功时返回实际写的字节数

5.代码:

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdlib.h>
#include<errno.h>
int main(int argc,char* argv[]){
	int file_src,file_dest;
	char buf[4096];
	if(argc!=3){
		printf("arguments error!\n");
		exit(1);
	}
	if((file_src=open(argv[1],O_RDONLY))<0){
		perror(argv[1]);
		exit(1);
	}
	if((file_dest=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0666))<0){
		perror(argv[2]);
		exit(1);
	}
	ssize_t file_cnt;
	while((file_cnt=read(file_src,buf,4096))>0){
		if(write(file_dest,buf,file_cnt)!=file_cnt){
			perror("write error: ");
			exit(1);
		}
	}
	if(file_cnt==-1){
		perror("read error: ");
		exit(1);
	}
	close(file_src);
	close(file_dest);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值