C语言-标准IO

本文详细介绍了C语言中的标准IO,包括文件分类、文件描述符、标准输入输出错误处理,以及非格式化IO和格式化IO的常用函数。重点讨论了fopen函数的打开模式,如'r'、'w'、'a'等,以及文件操作的基本流程,如打开、读取、写入和关闭文件。此外,还讲解了fgetc、getc、fputc、putc等字符读写函数,以及fseek、ftell和rewind用于光标移动和定位的函数。最后,提供了两个实战案例,分别演示了文件复制和逆序复制的实现。
摘要由CSDN通过智能技术生成

===================================================

标准I/O

===================================================

Linux中的文件分类:

                               符号
    1.普通文件            -
    2.目录文件            d
    3.符号链接文件     l
    4.管道文件            p
    5.套接字文件        s
    6.块设备文件        b
    7.字符设备文件     c
    
===================================================
    
文件的模式分类:
    1.文本文件
    2.二进制文件

===================================================

文件描述符:是指文件相对应的下标,从0开始
    
                            对应的硬件
        0:标准输入            键盘            stdin
        1:标准输出            屏幕            stdout
        2:标准错误输出     屏幕            stderr
        
        0,1,2已被使用,其他文件的文件描述符从3开始
        
        标准输入,标准输出,标准错误输出是三个特殊的流,一直存在于系统中。
        
===================================================

标准IO分为2种:
    1.非格式化IO:是指无法自定义输入输出的格式
        
        fgetc/getc/getchar
        fgets/gets
        fread
        
    
    2.格式化IO:是指可以自定义输入输出的格式
        
        fputc/putc/putchar
        fputs/puts
        fwrite
        
===================================================

标准I/O的操作函数都是在<stdio.h>头文件中

文件操作的基本流程(即文件的打开,读取,写入,关闭):
    1.打开文件
    
        fopen()函数:
            打开文件
    
        格式:
            #include <stdio.h>
            FILE* fopen(const char* pathname , const char* mode );
            
            
            
        fopen函数的解释:
            FILE*:是指fopen函数的返回值是文件指针类型
            
            第一个参数pathname:是指文件路径名(即包含文件相对路径或绝对路径的文件名)
                
            第二个参数mode:是指访问(打开)文件的模式(方式)
                文件打开方式有:
                    1.r:读
                        - 以只读的方式打开文件
                            - 文件存在,则直接打开并对文件进行读取操作
                            - 文件不存在,则报错
                        
                    2.w:写
                        - 以只写的方式打开文件
                            - 文件存在,则打开文件并清空里面的内容,然后对文件进行写入操作
                            - 文件不存在,则创建该文件,然后打开该文件,然后对文件进行写入操作

                    3.a:追加
                        - 以追加的方式打开文件
                            - 文件存在,则打开文件并从文件末尾开始追加写入操作
                            - 文件不存在,则创建该文件,然后对文件进行写入操作
                    
                    4.r+:扩展读
                        以读写的方式打开文件(既可以读取操作,也可以写入操作)
                            - 文件存在,则直接打开并对文件进行读取操作
                            - 文件不存在,则报错
                        
                    5.w+:扩展写
                        - 以读写的方式打开文件(既可以读取操作,也可以写入操作)
                            - 文件存在,则打开文件并清空里面的内容,然后对文件进行写入操作
                            - 文件不存在,则创建该文件,然后打开该文件,然后对文件进行写入操作
                            
                    6.a+:扩展追加
                        - 以读写的方式打开文件(既可以读取操作,也可以写入操作)
                            - 文件存在,则打开文件并从文件末尾开始追加写入操作
                            - 文件不存在,则创建该文件,然后对文件进行写入操作
                            
                    注意:
                        打开方式可以组合使用
                            
                            例子:
                                rw:表示可以对文件同时进行读取和写入操作
                                ra:表示可以对文件进行读取操作和在末尾写入操作
                            
                            
        fopen函数的返回值:
            1.成功打开文件,则返回该文件的文件指针(即文件的地址)
            
            2.打开文件失败,则返回NULL(即空指针)
                - 作用:可用于判断文件是否成功被打开
                
                    例子:
                        #include <stdio.h>    //<stdio.h>头文件中包括了文件I/O操作
                        
                        int main()
                        {
                            FILE* f1 = fopen("./hello.txt" , "r");    //以只读的方式打开文本文件hello.txt
                            if (f1 == NULL)
                            {
                                //1.打开文件
                                printf("文件打开失败!");
                                return -1;
                            }
                            printf("文件打开成功!\n地址是:%p\n",f1);
                            
                            //2.关闭文件
                            fclose(f1);    //每次都要关闭已打开的文件,降低系统的负荷
                            printf("f1 closed successfully!\n");
                            
                            return 0;
                        }
                        
                        
                        
                - Linux中的fopen函数设置了错误返回值error,可以使用perror函数打印出文件打开失败的原因
                    
                    例子:
                        #include <stdio.h>
                        #include <errno.h>    //使用errno返回错误信息的头文件
                        
                        int main()
                        {
                            FILE* f1 = fopen("./hello.txt" , "r");    //以只读的方式打开文本文件hello.txt
                            printf("%d\n", errno);    //返回错误码,没有错误则返回0
                            if (f1 == NULL)
                            {    
                                //1.打开文件
                                perror("file open fail:");    //返回错误码下的具体错误信息
                                return -1;
                            }
                            printf("文件打开成功!\n地址是:%p\n",f1);
                            
                            //2.关闭文件
                            fclose(f1);    
                            printf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值