目录
1.先了解main函数参数的用法:
#include <stdio.h>
int main(int argc,char **argv)
{
printf("total params:%d\n",argc);
printf("No.1 params :%s\n",argv[0]);
printf("No.2 params :%s\n",argv[1]);
printf("No.3 params :%s\n",argv[2]);
return 0;
}
从代码运行结果可以看出:
argc :代表的是 ./a.out argc argv 这三个参数的个数
argv[0] :代表第一个参数./a.out
argv[1] :代表第二个参数 argc
argv[2] :代表第二个参数 argv
由此可见argv是数组的数组。
2.根据main函数参数的意义:拷贝文件编程思路及代码:
我们先将源文件定为 src.c ,目标文件定为 des.c
- 打开源文件 src.c
- 读 src 到 buf
- 打开/创建目标文件 des.c
- 将buf写入到des.c
- close两个文件
运行的时候就是这样拷贝啦: ./a.out src.c des.c
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
int fdSrc;
int fdDes;
char *readbuf; //如果直接写char readbuf[1024];不初始化会造成目标文件有脏,就是可能会多出一些不明所以的符号。
if(argc != 3){
printf("param error\n");
exit(-1);
}
fdSrc = open(argv[1],O_RDWR); //1.打开要拷贝的源文件
int size = lseek(fdSrc,0,SEEK_END); //利用lseek返回值计算文件的大小
lseek(fdSrc,0,SEEK_SET); //移动光标到头
readbuf = (char *)malloc(sizeof(char)*size + 8);
read(fdSrc,readbuf,size); //2.读源文件到readbuf缓冲区
fdDes = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600); //3.打开/创建你要拷贝到的目标文件,如果目标文件已存在有内容,O_TRUNC清除掉内容
write(fdDes,readbuf,strlen(readbuf)); //4.将readbuf里面的内容写入目标文件
close(fdSrc); //5.关闭打开的文件
close(fdDes);
return 0;
}