目标:实现 cp src.c des.c 拷贝一个文件的内容到另外一个文件。
一、C语言参数
二、思路:
- 打开src.c;
- 读src到buf;
- 打开/创建des.c;
- 将buf写到des.c;
- close两个文件;
要用到参数的话,main函数的原型需要写完整: 括号里的是参数,main函数可以接受命令行参数
int main(int argc,char **argv)
在这段代码中,int main(int argc, char **argv)
意味着 main
函数接受命令行参数,并且使用 argc
和 argv
这两个参数来获取命令行传递的参数信息。
接受命令行参数意味着程序可以在运行时从命令行中接收输入,并将这些输入用作程序的参数。在C语言中,main
函数可以接受两个参数:argc
和 argv
。
argc
(argument count)是一个整数,表示命令行参数的数量,包括程序名本身。argv
(argument vector)是一个指向字符串数组的指针,每个字符串都是一个命令行参数
例如,当你在终端中运行一个可执行文件时,你可以在命令行中传递参数,如下所示:
./a.out arg1 arg2 arg3
在这个例子中,argc
的值是 4,argv
中包含了程序名以及三个参数的字符串数组。
-
int main(int argc, char **argv)
:main
函数,接受命令行参数。 -
int fdSrc;
和int fdDes;
: 声明两个整型变量,分别用于表示源文件和目标文件的文件描述符。int fdSrc; int fdDes;
-
char *readBuf = NULL;
: 声明一个字符指针readBuf
,用于存储从源文件读取的内容。char *readBuf = NULL;
-
if(argc != 3){...}
: 检查命令行参数的个数是否为 3,如果不是则输出错误信息并退出程序。if(argc != 3){ printf("param error\n"); exit(-1); }
-
fdSrc = open(argv[1], O_RDWR);
: 打开第一个命令行参数指定的文件,以读写方式打开。fdSrc = open(argv[1], O_RDWR);
-
int size = lseek(fdSrc, 0, SEEK_END);
: 使用lseek
函数获取源文件的大小,即文件的字节数。int size = lseek(fdSrc, 0, SEEK_END);
-
lseek(fdSrc, 0, SEEK_SET);
: 将文件指针移动到文件的开头,以便后续读取文件内容。lseek(fdSrc, 0, SEEK_SET);
-
readBuf = (char *)malloc(sizeof(char)*size + 8);
: 使用malloc
函数动态分配内存空间给readBuf
,分配的空间大小为源文件的大小加上 8 个额外的字节。readBuf = (char *)malloc(sizeof(char)*size + 8);
-
int n_read = read(fdSrc, readBuf, size);
: 使用read
函数从源文件中读取内容到readBuf
中,读取的字节数为文件的大小。int n_read = read(fdSrc, readBuf, size);
-
fdDes = open(argv[2], O_RDWR|O_CREAT|O_TRUNC, 0600);
: 打开第二个命令行参数指定的文件,如果文件不存在则创建,如果存在则清空文件内容,并以读写方式打开。fdDes = open(argv[2], O_RDWR|O_CREAT|O_TRUNC, 0600);
-
int n_write = write(fdDes, readBuf, strlen(readBuf));
: 使用write
函数将readBuf
中的内容写入到目标文件中,写入的字节数为readBuf
中字符串的长度。int n_write = write(fdDes, readBuf, strlen(readBuf));
-
close(fdSrc);
和close(fdDes);
: 关闭源文件和目标文件的文件描述符。close(fdSrc); close(fdDes);
-
return 0;
: 程序正常结束。
这段代码的主要功能是将一个文件的内容复制到另一个文件中。它首先打开源文件,获取文件的大小,然后动态分配内存空间并读取文件内容到内存中,最后将内存中的内容写入到目标文件中。
完整代码: