高级编程学习笔记day02(知识点篇)

标准IO学习笔记
1. 流: 当用标准I/O库打开一个文件时, 一个流就与一个文件相关联.

2. 对一个进程预定义了3个流,这三个流可以自动的被进程使用, 分别是: 标准输入, 标准输出, 标准错误(stdin, stdout, stderr).

3. 缓冲
    (1): 引入缓冲是为了减少read和write调用的次数,同时对每个I/O流自动的进行缓冲管理.
    (2): 标准I/O提供了三种缓冲
        行缓冲:stdin, stdout
        无缓冲:stderr
        全缓冲:其余大部分都是全缓冲的
    (3): 缓冲区刷新:调用fflush(3)函数, 调用fclose(3)函数, main到return
4. 打开流
    FILE *fopen(const char *path, const char *mode);
    FILE *fdopen(int fd, const char *mode);
    note: (1) fopen函数打开路径名为path的指定文件
          (2) fdopen函数通过文件描述符打开文件,
          (3) mode参数: r 只读打开, 流位于文件的开头.
                        r+ 读写打开, 流位于文件开头.
                        w 将文件截断为零长度或创建用于编写的文本文件, 流位于文件的开头.
                        w+ 读写打开, 如果文件不存在, 创建该文件, 否则截断该文件, 流位于文件的开头.
                        a 以在文件末尾追加内容的方式打开, 如果文件不存在则创建, 流位于文件的末尾.
                        a+ 以读或在文件末尾追加的方式打开, 若果不存在则创建, 用于读取的初始文件位置位于文件的开头, 但是输出总是附加到file的末尾.
           (4) 在指定w或a类型创建一个新文件时, 我们无法说明该文件的访问权限.
          
4. 基本I/O操作函数
    按字节读写:
        r: getchar(3) fgetc(3) getc(3)
        w: putchar(3) fputc(3) putc(3)
    按行读写:
        r: gets(3)(不用)    fgets(3)
        w: puts(3)            fputs(3)
    按结构读写:
        r: fread(3)
        w: fwrite(3)
    按格式花读写:
        r: scanf(3) fscanf(3)
        w: printf(3) fprintf(3)

5. 定位流
    fseek: int fseek(FILE *fp, long offset, int whence);
    ftell: long ftell(FILE *fp);
    rewind: void rewind(FILE *fp);
    note: (1) whence 的值和lseek函数的相同

6. fdopen(3) 通过文件描述符得到流
   fileno(3) 通过流得到文件描述符

7. getline(3)
    ssize_t getline(char **lineptr, size_t *n, FILE *stream);
    note: (1) 从流中读取整行存储到*lineptr, 缓冲区以NULL结尾, 如果找到换行符, 则包含换行符.

8. feof(3), ferror(3)
    note: (1) 函数feof()测试由流指向的流的文件结束指示器, 如果设置为非0, 则返回非0. 文件指示器只能由函数clearerr()清除.
          (2) 函数ferror()测试由流指向的流的错误指示器, 如果设置为非0, 则返回非0, 错误指示器同样只能由clearerr()函数设置.

9. 关闭流
    int fclose(FILE *fp);
    note: (1) 在文件被关闭之前, 冲洗缓冲中的输出数据.
          (2) 如果标准I/O库已经为该流自动分配了一个缓冲区, 则释放此缓冲区.

posted @ 2019-03-18 12:21  frankzsr  阅读(135)  评论(0编辑  收藏  举报