这次先说废话,再上代码!(因为cp指令的实现需要明白main函数传参)
1、main函数参数了解
int main(int argc,char *argv[])
{
return 0;
}
C语言规定了main函数的参数只能有两个,一个是argc,一个是argv,并且argc只能是整数,第二个必须是指向字符串的指针数组。
>> argc: 参数表示命令行中参数的个数(注意 文本名本身也是一个参数), rgc 的值是在输入命令行时由系统按 实际参数的个数自动赋予的。>> argv :参数是字符串指针数组,其各元素值为命令行中各字符串 ( 参数均按字符串处理 ) 的首地址。 指针数组的长度即为参数个数。数组元素初值由系统自动赋予。
示例(Linux系统下完成):
#include <stdio.h>
int main(int argc , char *argv[])
{
printf("argc is totall %d\n",argc);
printf("argv is fistr %s\n",argv[0]);
printf("argv is second %s\n",argv[1]);
printf("argv is tired %s\n",argv[2]);
printf("argv is fourth %s\n",argv[3]);
return 0;
}
结果展示:
2、实现cp指令(Linux)
src 源文件 des 目标文件
执行流程:
1、打开源文件(src)open()函数;
2、读取src文件到缓存数组read;
3、打开目标文件(des)open()函数;
4、写入目标文件write;
5、关闭目标文件和源文件close;
6、./a.out src.c des.c
cp指令代码来咯:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc , char *argv[]){
int stc;
int des;
char readbuff[1024]={0};//若文件较大可以增大字符数组个数,使用malloc函数也同样可以
int read_had=0;
stc = open(argv[1],O_RDWR);
read_had = read(stc, &readbuff, 1024); //&readbuff首地址读取
des = open(argv[2], O_RDWR|O_CREAT, 0755);
write(des, &readbuff ,read_had); //&readbuff首地址写入,写入个数以已读取个数为限
close(stc);
close(des);
return 0;
}
代码运行展示:
检查两个文件是否cp成功,可以使用diff src(源文件) des(目标文件),若无任何提示,则表示cp成功。
此外运用代码实现cp指令功能不仅可以提高对于Linux文件编写的认识,对于日后应付某些嵌入式相关岗位面试题也有一定帮助。