Ubuntu 简易 cp 命令实现:simcp.c 源代码解析
Ubuntu 简易 cp 命令实现:simcp.c 源代码解析
本文将详细解析如何在 Ubuntu 中修改 testcat.c 源代码,实现一个简易的 cp 命令 simcp.c。通过该代码,你可以了解如何使用 creat 函数创建文件、使用 read 和 write 函数进行文件操作,以及如何处理文件打开和关闭等基本操作。
原代码 (testcat.c)
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<errno.h>
#include<stdio.h>
#include<string.h>
#define BUF_SIZE 30
int main(int argc, char* argv[])
{
char buf[BUF_SIZE];
int len = 0;
int fd = -1;
if (argc != 2) {
printf("wrong parameters\n");
return -1;
}
fd = open(argv[1], O_RDONLY);
if (fd == -1) {
printf("error in open file");
printf("the error is: %s\n", strerror(errno));
return -1;
}
else {
//printf("open file success\n");
while ((len = read(fd, buf, BUF_SIZE)) != 0) {
write(STDOUT_FILENO, buf, len);
}
}
if (fd > 0) {
close(fd);
}
return 0;
}
修改后的代码 (simcp.c)
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<errno.h>
#include<stdio.h>
#include<string.h>
#define BUF_SIZE 30
int main(int argc, char* argv[])
{
char buf[BUF_SIZE];
int len = 0;
int fd_src = -1, fd_dst = -1;
if (argc != 3) {
printf("wrong parameters\n");
return -1;
}
fd_src = open(argv[1], O_RDONLY);
if (fd_src == -1) {
printf("error in open source file");
printf("the error is: %s\n", strerror(errno));
return -1;
}
fd_dst = creat(argv[2], 0666);
if (fd_dst == -1) {
printf("error in create destination file");
printf("the error is: %s\n", strerror(errno));
close(fd_src);
return -1;
}
else {
while ((len = read(fd_src, buf, BUF_SIZE)) != 0) {
write(fd_dst, buf, len);
}
}
if (fd_src > 0) {
close(fd_src);
}
if (fd_dst > 0) {
close(fd_dst);
}
return 0;
}
代码修改说明
- 增加文件描述符 fd_dst:用于表示目标文件。
- 参数判断:判断参数数量是否为 3 个(包括命令本身)。
- 使用 creat 函数创建目标文件:并将返回的文件描述符赋值给 fd_dst。
- 写入目标文件:使用 write 函数,并指定文件描述符 fd_dst。
- 关闭文件描述符:在程序结束前,关闭源文件和目标文件的文件描述符。
编译和执行
- 使用 GCC 编译 simcp.c 文件:
gcc simcp.c -o simcp
- 执行命令进行文件复制:
./simcp simcp.c simcp.old.c
其中 simcp.c 为源文件,simcp.old.c 为复制生成的目标文件。
总结
通过修改 testcat.c,我们成功实现了简易的 cp 命令 simcp.c。该代码展示了文件操作的基本流程,包括文件打开、创建、读取、写入和关闭等操作。希望这篇文章能够帮助你更好地理解 Linux 文件操作的原理和方法。
原文地址: https://www.cveoy.top/t/topic/nFOz 著作权归作者所有。请勿转载和采集!