cp指令格式
cp [原文件] [目标文件]
cp 1.c 2.c
功能是将原文件1.c复制后并改名成2.c(内容相同,实现拷贝)
这里需要引入main函数的参数解读:
我们在定义函数时许多都带有参数,输入参数后便可进行定义函数内的功能执行,而main函数也不例外,其函数定义和参数格式如下:
int main(int argc,char **argv)
argc | 输入参数的个数 |
argv | 输入参数的字符串,字符串个数由输入参数个数决定,同时agrv[0]指向第一个字符串 |
#include <stdio.h>
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;
}
由编译结果可知,总共有三个输入参数,同时输出每个参数字符串内容
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 <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
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;
}
可见,通过cp指令可以拷贝一个内容与7.c一样但名字不同的new.c