Linux编程实现cp指令
linux正常cp是在输入指令:cp src.c des.c (在这里src.c是源文件,des是需要生成的目标文件)
这里有三个参数 所以argc为3,是一个int型。argv是一个二级指针,是一个数组的指针,意思是这个指针的每一项都是一个数组,在这里
cp是argc[0]
src.c是argv[1]
des.c是argv[2]
#include <stdio.h>
int main(int argc,char **argv)
{
printf("total program:%d\n",argc);
printf("No.1 program:%s\n",argv[0]);
printf("No.2 program:%s\n",argv[1]);
printf("No.3 program:%s\n",argv[2]);
return 0;
}
这里编程实现,可以看到printf打印出来的效果
cp指令的思路
a. 打开创建src.c
b.读src.c到buf中
c. 打开创建des.c
d .将buf写入des.c
e .close关闭两个文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
int fdsrc;
int fddes;
char *readbuf=NULL;
if(argc<3){
printf("param error\ni");
exit(-1);
}
fdsrc=open(argv[1],O_RDWR);
int size=lseek(fdsrc,0,SEEK_END);
lseek(fdsrc,0,SEEK_SET);
readbuf=(char *)malloc(sizeof(size)+8);
int n_read=read(fdsrc,readbuf,size);
fddes=open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);
int n_write=write(fddes,readbuf,strlen(readbuf));
close(fdsrc);
close(fddes);
return 0;
}
代码用到了打开创建文件用到O_TRUNC,用来如果这个文件中本来是有内容的,完全覆盖。
打开新文件,可以看到新文件内容与被复制文件内容完全一直,运行自己的代码实现了cp指令。