在实现cp指令之前,首先先要了解这样一个概念,我们平时在写代码时
int main() 这个括号里省略了3个参数。
int main(int argc,char** argv,char** environ)
//argc 表示参数的数量
//argv 是一个字符串数组,里面按顺序存储着每一个参数的名字。
//environ 是环境变量,我们现在暂时用不到。
了解了这个之后我们就可以开始实现cp指令了。
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
#include<stdlib.h>
#include<getch.h>
int main(int argc,char** argv,char** environ)
{
if(NULL==argv[1])//argv[0]是运行的程序名 ,所以我们直接判断argv[1]是否为空就能知道参数是否足够。
{
puts("缺少参数\n");
return 0;
}
if(NULL!=argv[3])//如果argv[3]不为空,说明有第三个参数,而cp指令只需要有2个参数。
{
puts("参数过多\n");
return 0;
}
int fd=open(argv[1],O_RDWR|O_CREAT,S_IRWXU);//打开要拷贝的文件
if(fd<0)
{
puts("你没有权限打开目标文件");
return 0;
}
int fd2=open(argv[2],O_RDWR|O_CREAT|O_EXCL,S_IRWXU);//建立一个新的空白文件
if(fd2<0)
{
puts("已经存在要复制的文件,覆盖请按y,停止操作请按其他键");
char ch;
ch=getch();
if(ch == 'y')
{
fd2=open(argv[2],O_RDWR|O_CREAT,S_IRWXU);
if(fd2<0)
{
puts("你没有权限在这个目录下创建或修改文件");
return 0;
}
}
else
return 0;
}
int count=1;
for(int i=0;count>0;i++)
{
char buf;
count=read(fd,&buf,sizeof(buf));
write(fd2,&buf,sizeof(buf));
}//将被拷贝的文件的内容写入到空白文件中
close(fd);//关闭被拷贝的文件
close(fd2);//关闭新的文件
return 0;
}
效果图
这样就成功吧ls.c的内容拷贝到text.c中了