用C语言实现Linux系统的cp指令

在实现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中了

猜你喜欢

转载自blog.csdn.net/weixin_43716607/article/details/86134369