• 学习笔记第十九天


    1.标准I/O的基本概念

            标准输入(stdin):默认是指键盘输入

            标准输出(stdout):默认是指显示器输出。

            标准错误(stderr):用于输出错误信息,也是指向显示器,但与stdout不同,stderr通常是无缓冲的,以确保错误信息能立即显示。

    2.标准I/O函数

    标准I/O库提供了一系列函数来打开、读写和关闭文件。这些函数包括:

            打开文件:FILE *fopen(const char *path, const char *mode);

            关闭文件:int fclose(FILE *stream);

            字符读写:int fgetc(FILE *stream);

           int fputc(int char, FILE *stream);

            行读写:char *fgets(char *str, int n, FILE *stream);

          int fputs(const char *str, FILE *stream);

            块读写:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

        size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

    3.缓冲机制

    标准I/O库使用缓冲机制来提高效率。缓冲分为三种类型:

            全缓冲:对于文件操作,通常使用全缓冲。当缓冲区满、文件关闭或显式调用fflush时,缓

    冲区内容才会被写入文件。

            行缓冲:对于标准输出(stdout)和某些特殊文件(如终端),使用行缓冲。当遇到换行符、

    缓冲区满、文件关闭或显式调用fflush时,缓冲区内容会被刷新。        

            无缓冲:标准错误(stderr)通常是无缓冲的,以确保错误信息能立即显示。

    4.文件操作的步骤

            打开文件:使用fopen函数打开文件,并返回一个FILE指针。

            读写文件:使用标准I/O库提供的函数进行读写操作。

            关闭文件:使用fclose函数关闭文件,并释放相关资源

    5.文件打开模式

            r:只读模式。文件必须存在,否则报错。

            r+:读写模式。文件必须存在,否则报错。

            w:只写模式。文件不存在则创建,存在则清空内容。

            w+:写读模式。文件不存在则创建,存在则清空内容。

            a:追加模式。文件不存在则创建,存在则在文件末尾追加。

            a+:追加读写模式。文件不存在则创建,存在则在文件末尾追加,同时允许读取。

    6.示例

    1. while(1)
    2. {
    3. fputc(fgetc(stdin), stdout);
    4. }

            使用EOF宏判断,但需注意EOF在C语言中通常定义为-1,但实际读取时不会直接返回-1,而

    是到达文件末尾时返回EOF。

    1. #include
    2. int main(void)
    3. {
    4. FILE* src = fopen("1.txt","r");
    5. FILE* dst = fopen("2.txt","w");
    6. if(NULL == src||NULL ==dst)
    7. {
    8. printf("error1!");
    9. return 1;
    10. }
    11. while(1)
    12. {
    13. int c = fgetc(src);
    14. if(EOF == c)
    15. {
    16. break;
    17. }
    18. fputc(c,dst);
    19. }
    20. fclose(src);
    21. fclose(dst);
    22. return 0;
    23. }
    1. #include
    2. #include
    3. int main(int argc,char *argv[])
    4. {
    5. if(argc<3)
    6. {
    7. printf("error1!\n");
    8. return 1;
    9. }
    10. FILE* src = fopen(argv[1],"r");
    11. FILE* dst = fopen(argv[2],"w");
    12. if(NULL == src)
    13. {
    14. printf("error1!\n");
    15. return 1;
    16. }
    17. char buf[4096]= {0};
    18. while(1)
    19. {
    20. memset(buf,0,sizeof(buf));
    21. if(fgets(buf,sizeof(buf),src))
    22. {
    23. int a = fputs(buf,dst);
    24. if(a == EOF)
    25. {
    26. printf("error2!\n");
    27. return 1;
    28. }
    29. }
    30. else
    31. {
    32. break;
    33. }
    34. }
    35. fclose(src);
    36. fclose(dst);
    37. return 0;
    38. }
    1. #include
    2. #include
    3. #include
    4. int main(int argc,char *argv[])
    5. {
    6. if(argc<3)
    7. {
    8. printf("error!\n");
    9. return 1;
    10. }
    11. FILE* src = fopen(argv[1],"r");
    12. FILE* dst = fopen(argv[2],"w");
    13. if(NULL == src||dst == NULL)
    14. {
    15. printf("error1!\n");
    16. return 1;
    17. }
    18. char buf[2]= {0};
    19. while(1)
    20. {
    21. bzero(buf,sizeof(buf));
    22. if(fread(buf,sizeof(buf),1,src))
    23. {
    24. int a = fwrite(buf,sizeof(buf),1,dst);
    25. if(a == EOF)
    26. {
    27. printf("error2!\n");
    28. return 1;
    29. }
    30. }
    31. else
    32. {
    33. break;
    34. }
    35. }
    36. fclose(src);
    37. fclose(dst);
    38. return 0;
    39. }

  • 相关阅读:
    微软新服务,允许企业扩大对其威胁情报库的访问权限
    【微信测试号实战——02】编写你独有的微信消息模板
    接口测试的概念、目的、流程、测试方法有哪些?
    Python爬虫如何使用代理IP进行抓取
    如何使用ArcGIS Pro直接获取道路中心线
    【Elasticsearch教程4】Mapping 动态映射
    加固移动应用的重要性及方法论
    基于51单片机酒精浓度检测仪超限报警Proteus仿真
    多测师肖sir_高级金牌讲师_python的安装002
    A*路径规划探究
  • 原文地址:https://blog.csdn.net/m0_69699758/article/details/140935445