Linux系统编程——实现cp指令(应用)

cp指令格式

cp [原文件] [目标文件]

cp 1.c 2.c

功能是将原文件1.c复制后并改名成2.c(内容相同,实现拷贝)

这里需要引入main函数的参数解读

我们在定义函数时许多都带有参数,输入参数后便可进行定义函数内的功能执行,而main函数也不例外,其函数定义和参数格式如下:

int main(int argc,char **argv)
argc 输入参数的个数
argv 输入参数的字符串,字符串个数由输入参数个数决定,同时agrv[0]指向第一个字符串
#include 

int main(int argc,char **argv)
{
        printf("total params is %d\n",argc);
        printf("No.0 params is %s\n",argv[0]);
        printf("No.1 params is %s\n",argv[1]);
        printf("No.2 params is %s\n",argv[2]);

        return 0;
}

Linux系统编程——实现cp指令(应用)_第1张图片

由编译结果可知,总共有三个输入参数,同时输出每个参数字符串内容

cp 1.c 2.c→cp为第一个参数,1.c为第二个参数,2.c为第三个参数

Linux环境下指令详解

运用文件编程知识在Linux对cp指令操作进行拆分并实现最终结果,操作如下:

1.打开原文件1.c

2.将原文件1.c内容读取到buf中

3.打开/创建目标文件2.c

4.把buf中的内容写入到目标文件2.c中

5.关闭原文件1.c和目标文件2.c

代码展示

#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc,char **argv)
{
	int fdSrc;
	int fdDes;

	char *readBuf = NULL;

	if(argc != 3)
	{
		printf("insert error\n");
		exit(-1);//若参数不等于3则终止运行程序
	}

	fdSrc = open(argv[1],O_RDWR);//打开原文件
	int size = lseek(fdSrc,0,SEEK_END);//计算光标移到文件尾的字节数
    lseek(fdSrc,0,SEEK_SET);//再将光标移动文件头,方便后续读取

	readBuf = (char* )malloc(sizeof(char)*size + 8);//给readBuf开辟内存空间,此处多分配8个,防止空间溢出

	int n_read = read(fdSrc,readBuf,size);//将从fdSrc中读取的内容存放到readBuf,长度为1024个字节之内
	
	fdDes = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);//打开目标文件,若没有目标文件则创建一个并打开,若目标文件存在且其中有其他数据,则会清楚数据方便后续写入

	int n_write = write(fdDes,readBuf,strlen(readBuf));	//将readBuf中的数据写入fdDes中

	close(fdSrc);
	close(fdDes);

	return 0;
}

Linux系统编程——实现cp指令(应用)_第2张图片

可见,通过cp指令可以拷贝一个内容与7.c一样但名字不同的new.c

你可能感兴趣的:(linux)