• Linux下程序(C语言)实现对文件的复制


    目标: 使用系统调用实现cp命令。

    原理: 使用系统调用fopen打开文件,使用fgets()从文件读数据,使用fputs() 向文件写数据。
     

    linux 文件  创建命令为 vi  (文件名).c

    文件源码:

    1. #include
    2. #include
    3. #define N 32
    4. int main(int argc,const char *argv[])
    5. {
    6. FILE *fp,*fps;
    7. char buf[N] ="";
    8. fp=fopen("text.txt","a+");
    9. fprintf(fp,"%s/n","Nothing Succeeds without a strong will\n");
    10. fp=fopen("text.txt","r");
    11. if(fp==NULL)
    12. {
    13. perror("fopen");
    14. exit(1);
    15. }
    16. fps=fopen("text1.txt","w");
    17. if(fps==NULL)
    18. {
    19. perror("fopen");
    20. fclose(fp);
    21. exit(1);
    22. }
    23. while(fgets(buf,N,fp)!=NULL)
    24. fputs(buf,fps);
    25. fclose(fp);
    26. fclose(fps);
    27. return 0;
    28. }

    运行代码:

    1. gcc myy.c -o myy
    2. ./myy
    3. ./myy
    4. cat text.txt
    5. Nothing Succeeds without a strong will
    6. /nNothing Succeeds without a strong will
    7. cat text1.txt
    8. Nothing Succeeds without a strong will

    结果:

    这里我执行了两次的原因是第一次执行,文件只能输出到text.txt文件中,而无法从中获取内容,所以我执行了两次,第二次就可从该文件中取出然后复制到另一个文件。且我的输出text.txt文件为“a+”,即追加方式,不会覆盖原有内容。

    当然有一种最直接的解决方法就是将fprintf()函数替换成fwrite(),

    更正一下:这是fwrite的正确用法 fwrite(buf,1,N,fp),图片上面那个是我写错了。

    第二种方法就是将追加方式改为“w”,

    第三种呢就是你提前创建好一个text.txt文件,写入内容,创建方式为 vi text.txt

    拿我的为例,写入内容依旧为“Nothing Succeeds without a strong will"

    然后就可以删除.c文件中的fprintf()了。

    我这里省略的有一些小细节,具体就不和大家演示了,希望大家多多尝试,勇于探索,找到你认为最适用的。

  • 相关阅读:
    从零开始C语言精讲篇1:初识C语言
    C++/Python/Qt编码规范大总结
    GitHub上线重量级分布式架构原理设计笔记,开源的东西看着就是爽
    合肥先进光源国家重大科技基础设施项目及配套工程启动会纪念
    mybatis-plus 扩展、插件
    SLAM ORB-SLAM2(6)系统对象
    在ubuntu系统中设置virtualbox虚拟机开机自动启动
    001 Creating your first app with PySide6
    Linux的基本权限
    Java:选择哪个Java IDE好?
  • 原文地址:https://blog.csdn.net/bujianzingguang/article/details/133903642