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;
}