文件编程练手 [1] —— 编码实现系统自带指令cp

原创首发于CSDN,文章转载请注明出处,加上原文链接,谢谢!
https://blog.csdn.net/weixin_46959681/article/details/112156151


文章目录

    • 主函数 main() 参数打印
    • 指令 cp 实现思路详解
      • |系统指令 `cp` 的代码实现 `mycp.c`
    • 文章更新记录


主函数 main() 参数打印

在主函数 main() 中一共有两个参数 int argc、char **argv。对于程序来说,所有的一切都是程序名开始的。在原来的 cp 指令的实现过程里,cp、src.c、des.c 三者分别对应参数 0、1、2 ,一共三个参数。这三个参数属于主函数 main() 中的 int argc。第二个参数 char **argv 是一个二级指针,其所有元素都是一个字符型数组。argv[0] 对应 cp 含有两个字符元素的数组,argv[1] 对应 src.c 含有五个字符元素的数组, argv[2] 也对应 des.c 含有五个字符元素的数组。对以上

对以上内容进行编程检测,源代码:test1.c

/* test1.c */
#include 

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;
}

结果如下:
文件编程练手 [1] —— 编码实现系统自带指令cp_第1张图片

基于以上结果证明,我们可以通过自定义编程实现对应的系统指令 cp 。


指令 cp 实现思路详解

  1. 明确C语言的参数 argc、argv;
  2. 打开源文件src.c
  3. 读取src.c的数据到文件缓冲区Buf;
  4. 创建目标文件des.c
  5. 将文件缓冲区Buf内的数据写入目标文件内;
  6. 关闭 close 两个文件。

|系统指令 cp 的代码实现 mycp.c

源代码: mycp.c

/* mycp.c */
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char **argv)
{
		//源文件、目标文件、缓冲buf。
        int fdSrc;
        int fdDes;
		char *readBuf = NULL;
		
		if(argc != 3){
                printf("params error.\n");
                exit(-1);
        }
        
        fdSrc = open(argv[1], O_RDWR);
        if(fdSrc == -1){
				printf("Source file opened fial.\n");
				exit(-1);
		}
        
        //使用光标进行文件内容字节数的读取统计。
        int filesize = lseek(fdSrc, 0, SEEK_END);
        //光标复位。
        lseek(fdSrc, 0, SEEK_SET);
		
		//读取数据进入readBuf
        readBuf = (char *)malloc(sizeof(char)*filesize + 8);
        read(fdSrc, readBuf, filesize);
		
		//若无目标文件则创建(O_CREAT)并覆盖(O_TRUNC)其数据内容。
        fdDes = open(argv[2], O_RDWR|O_CREAT|O_TRUNC, 0600);
        if(fdDes == -1){
				printf("Destinative file opened fail.\n");
		}
		//将数据写入目标文件。
        write(fdDes, readBuf, strlen(readBuf));

		free(readBuf); 
        close(fdSrc);
        close(fdDes);
        return 0;
}	

运行生成的文件 mycp,使用文件 demo15.c 作为源文件。
文件编程练手 [1] —— 编码实现系统自带指令cp_第2张图片

文件编程练手 [1] —— 编码实现系统自带指令cp_第3张图片

使用指令 cat ,会发现两个文件的代码是相同的,表明我们已经成功实现使用自己的代码实现系统自带的指令 cp 。

文件编程练手 [1] —— 编码实现系统自带指令cp_第4张图片


文章更新记录

  • 文章第一次成文。 「2021.1.3 22:46」
  • 重新上传了第一张图片。 「2021.1.4 10:31」
  • 修改了部分内容。 「2021.1.8 20:15」
  • 修改文章标题。 「2021.1.18 15:41」
  • 独立出了第一节内容。 「2021.3.17 21:29」
  • 修改错别字。 「2021.3.18 9:50」
  • 将文章转移至二级专栏“Linux操作系统”中。 「2021.5.13 11:32」

你可能感兴趣的:(#,Linux操作系统,linux,ubuntu)