I/O进程1

  • day1
    • 一、标准IO
      • 1.概念
        • 在C库中定义的一组用于输入输出的函数
      • 2.特点
        • (1).通过缓冲机制减少系统调用,提高效率
        • (2.)围绕流进行操作,流用FILE *来描述
        • (3).标准IO默认打开了三个流,stdin(标准输入)、stdout(标准输出)、stderr(标准错误)
        • (4).一般操作普通文件
      • 3.缓冲区
        • (1).全缓冲:与文件相关
        • 缓冲区刷新条件:
        • 程序正常退出:return(main) exit
        •  缓冲区溢出
        • 强制刷新fflush
        • fclose关闭对应的流
        • (2).行缓冲:与终端相关
        • 缓冲区刷新条件:
        • \n
        • 程序正常退出:return(main) exit
        • 缓冲区溢出
        • 强制刷新fflush
        • fclose关闭对应的流
        • (3).不缓冲:没有缓冲区,标准错误
        • 计算缓冲区大小(1kb)
      • 4.函数接口
        • 4.1打开文件fopen
          • FILE *fopen(const char *path, const char *mode)
          • 功能:打开文件
          • 参数:path:打开的文件     mode:打开的方式         r:只读,当文件不存在时报错,文件流定位到文件开头         r+:可读可写,当文件不存在时报错,文件流定位到文件开头         w:只写,文件不存在创建,存在清空         w+:可读可写,文件不存在创建,存在清空        a:追加(在末尾写),文件不存在创建,存在追加,文件流定位到文件末尾       a+:读和追加,文件不存在创建,存在追加,读文件流定位到文件开头,写文件流定位到文件末尾         
          • 注:当a的方式打开文件时,写只能在末尾进行追加,定位操作是无法改变写的位置,但是可以改变读的位置
          • 返回值:成功:文件流;失败:NULL,并且会设置错误码。
        • 4.2关闭文件 fclose
          • int fclose(FILE* stream);
          • 功能:关闭文件
          • 参数:stream:文件流
        • 4.3读写操作fread fwrite fgets fputs
          • (1).按照字符串读写
            • char * fgets(char *s, int size, FILE * stream);
            • 功能:从文件中每次读取一行字符串
            • 参数:s:存放字符串的地址          size:一次读取的字符个数          stream:文件流
            • 返回值:成功:s的地址;失败或读到文件末尾:NULL
            • 特性:每次实际读取的字符个数为size-1个,会在末尾自动添加\0           每次读一行,遇到\n后不再继续,读下一行。
            • int fputs(const char *s, FILE * stream);
            • 功能:向文件中写字符串
            • 参数:s:要写的内容         stream:文件流
            • 返回值:成功:非负整数;失败:EOF
            • 练习:通过fgets实现"wc -l 文件名"命令功能(计算文件行数)
          • (2).按照二进制的方式进行读写:一般操作二进制文件
            • size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
            • 功能:从文件流读取多个元素
            • 参数:ptr :用来存放读取元素           size :元素大小 sizeof(数据类型)           nmemb :读取元素的个数           stream :要读取的文件
            • 返回值:成功:读取的元素的个数; 读到文件尾: 0        失败: -1
            • size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 功能:按对象写
            • 参数:同上
            • 返回值:成功:写的元素个数;失败 :-1
        • 4.4文件定位操作
          • void rewind(FILE *stream);
          • 功能:将文件位置指针定位到起始位置 int fseek(FILE *stream, long offset, int whence);
          • 功能:文件的定位操作
          • 参数:stream:文件流           offset:偏移量:正数表示向后文件尾部偏移,负数表示向文件开头偏移           whence:相对位置:            SEEK_SET:相对于文件开头            SEEK_CUR:相对于文件当前位置            SEEK_END:相对于文件末尾
          • 返回值:成功:0;失败:-1
          • 注:当打开文件的方式为a或a+时,fseek不起作用                                         
          •  long ftell(FILE *stream);
          • 功能:获取当前的文件位置
          • 参数:要检测的文件流
          • 返回值:成功:当前的文件位置,出错:-1