• 标准I/O


    一、文件的概念和类型
    1、文件概念: 一组相关数据的有序集合
    2、文件类型:块设备文件:b、字符设备文件:c、目录文件:d、符号链接文件:l、管道文件:p、常规文件:r、套接字文件:s

    二、标准I/O
    1、标准I/O介绍
    标准I/O由ANSI C标准定义
    主流操作系统上都实现了C库
    标准I/O通过缓冲机制减少系统调用,实现更高的效率
    2、标准I/O——流
    FILE
    标准I/O用一个结构体类型来存放打开的文件的相关信息
    标准I/O的所有操作都是围绕FILE来进行
    流(stream)
    FILE又被称为流(stream)
    3、标准I/O——文本流/二进制流
    Windows
    二进制流:换行符   ‘ ’
    文本流:   换行符   ‘ ’‘ ’
    Linux
                   换行符   ‘ ’
    4、标准I/O——流的缓冲类型
    全缓冲:当流的缓冲区无数据或无空间时才执行实际I/O操作
    行缓冲:当在输入和输出中遇到换行符(‘ ’)时,进行I/O操作;当流和一个终端关联时,典型的行缓冲
    无缓冲:数据直接写入文件,流不进行缓冲
    5、标准I/O——stdin,stdout,stderr
    标准I/O预定义3个流,程序运行时自动打开
    标准输入流0 STDIN_FILENO    stdin
    标准输出流1 STDOUT_FILENO stdout
    标准错误流2 STDERR_FILENO stderr
    6、标准I/O——打开流
    下列函数可用于打开一个标准I/O流:FILE *fopen (const char *path, const char *mode);
    成功时返回流指针;出错时返回NULL
    a、path参数:文件路劲
    b、mode参数:
    “r” 或 “rb”           以只读方式打开文件,文件必须存在。
    “r+” 或 ”r+b”      以读写方式打开文件,文件必须存在。
    “w” 或 “wb”        以只写方式打开文件,若文件存在则文件长度清为0。若文件不存在则创建。
    “w+” 或 “w+b”   以读写方式打开文件,其他同”w”。
    “a” 或 “ab”         以只写方式打开文件,若文件不存在则创建;向文件写入的数据被追加到文件末尾。
    “a+” 或 “a+b”    以读写方式打开文件。其他同”a”
    *当给定”b”参数时,表示以二进制方式打开文件,但Linux下忽略该参数
    c、新建文件权限
    fopen() 创建的文件访问权限是0666(rw-rw-rw-);Linux系统中umask设定会影响文件的访问权限,其规则为(0666 & ~umask);用户可以通过umask函数修改相关设定
    7、标准I/O——处理错误信息
    extern int errno;
    void perror(const char *s);
    char *strerror(int errno);
    errno存放错误号
    perror先输出字符串s,再输出错误号对应的错误信息
    strerror根据错误号返回对应的错误信息
    8、标准I/O——关闭流
    fclose()调用成功返回0,失败返回EOF,并设置errno
    流关闭时自动刷新缓冲中的数据并释放缓冲区
    当一个程序正常终止时,所有打开的流都会被关闭。
    流一旦关闭后就不能执行任何操作
    9、标准I/O——按字符读写流
    下列函数用来输入一个字符:
    #include <stdio.h>
    int fgetc(FILE *stream);
    int getc(FILE *stream);
    int getchar(void);
    成功时返回读取的字符;若到文件末尾或出错时返回EOF。
    下列函数用来输出一个字符:
    #include <stdio.h>
    int fputc(int c, FILE *stream);
    int putc(int c, FILE *stream);
    int putchar(int c);
    成功时返回写入的字符;出错时返回EOF。
    10、标准I/O——按行读写流
    下列函数用来输入一行:
    #include <stdio.h>
    char *gets(char *s);
    char *fgets(char *s, int size, FILE *stream);
    成功时返回s,到文件末尾或出错时返回NULL
    gets不推荐使用,容易造成缓冲区溢出
    遇到’ ’或已输入size-1个字符时返回,总是包含’’
    下列函数用来输出字符串:
    #include <stdio.h>
    int puts(const char *s);
    int fputs(const char *s, FILE *stream);
    成功时返回输出的字符个数;出错时返回EOF。
    puts将缓冲区s中的字符串输出到stdout,并追加’ ’
    fputs将缓冲区s中的字符串输出到stream
    11、标准I/O——按对象读写
    下列函数用来从流中读写若干个对象:
    #include <stdio.h>
    size_t fread(void *ptr, size_t size, size_t n, FILE *fp);
    size_t fwrite(const void *ptr, size_t size, size_t n, FILE *fp);
    成功返回读写的对象个数;出错时返回EOF
    既可以读写文本文件,也可以读写数据文件
    效率高
    12、标准I/O——刷新流
    #include <stdio.h>
    int fflush(FILE *fp);
    成功时返回0;出错时返回EOF
    将流缓冲区中的数据写入实际的文件
    Linux下只能刷新输出缓冲区
    13、标准I/O——定位流
    #include <stdio.h>
    long ftell(FILE *stream);
    long fseek(FILE *stream, long offset, int whence);
    void rewind(FILE *stream);
    ftell() 成功时返回流的当前读写位置,出错时返回EOF
    fseek()定位一个流,成功时返回0,出错时返回EOF
    whence参数:SEEK_SET/SEEK_CUR/SEEK_END
    offset参数:偏移量,可正可负
    rewind()将流定位到文件开始位置
    读写流时,当前读写位置自动后移
    14、标准I/O——判断流是否出错和结束
    #include <stdio.h>
    int ferror(FILE *stream);
    int feof(FILE *stream);
    ferror()返回1表示流出错;否则返回0
    feof()返回1表示文件已到末尾;否则返回0
    15、标准I/O——格式化输出
    #include <stdio.h>
    int printf(const char *fmt, …);
    int fprintf(FILE *stream, const char *fmt, …);
    int sprintf(char *s, const char *fmt, …);
    成功时返回输出的字符个数;出错时返回EOF。

  • 相关阅读:
    自测项目:批量删除云盘重复文件
    表格更新成本 二 问用户年龄和口令,直到他们提供有效的输入
    知乎抓取、写入文档
    倒打印心
    HDU 1102 Constructing Roads
    C++模板:字典树
    HDU 3015 Disharmony Trees
    HDU 2227 Find the nondecreasing subsequences
    HDU 3486 Interviewe
    C++模板:ST算法
  • 原文地址:https://www.cnblogs.com/sanwumanzi/p/10593758.html
Copyright © 2020-2023  润新知