main函数的参数
C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。
还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。
加上形参说明后,main函数应写为:
int main(int argc, const char* argv[]);
其中第一个参数argc表示参数的个数,第二个参数中argv[0]为自身运行目录路径和程序名。
argv[1]指向第一个参数、argv[2]指向第二个参数……
实际上,main函数的参数值是从操作系统命令行上获得的。
当我们要运行一个可执行文件时,在Linux运行时,后面跟上参数即可把这些实参传 送到main的形参中去。
因此我们可以借助main函数的参数来实现Linux的cp和mv命令。
文件读写
C语言标准库提供了一套用于文件读写操作的函数
FILE *fopen(const char*path, const char* mode);
int fclose(FILE *stream);
int remove(const char *pathname);
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb,ILE *stream);
实现命令
有了以上基础,我们就可以试着自己实现mv和cp命令了
借助main函数参数,我们可以获取命令的源文件(src)和目标文件(dest)的名字和目录
下面是cp命令的代码,mv代码只要在cp的基础上,使用remove函数删除src文件就可以了
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char* argv[])
{
if(3!=argc)
{
return 0;
}
FILE* src_frp = fopen(argv[1], "r");
if(NULL==src_frp)
{
printf("%s打开失败,请检查!\n", argv[1]);
return -1;
}
FILE* dest_fwp = fopen(argv[2],"w");
if(NULL==dest_fwp)
{
printf("%s打开失败,请检查!\n", argv[2]);
return -1;
}
char buf[4096];
int ret=0;
while(ret=fread(buf,1, 4096,src_frp))
{
fwrite(buf,1, ret, dest_fwp);
}
fclose(src_frp);
fclose(dest_fwp);
return 0;
}
|