stdio.h

维基百科,自由的百科全书
(重定向自C file input/output
跳转至: 导航搜索

C语言为文件输入输出提供了许多标准库函数。这些库函数构成了C标准库头文件<stdio.h>的主体。它们的功能大多数都继承自迈克·莱斯克在70年代早期于贝尔实验室所编写的一个“可移植的I/O程序库”。

按照现在的视角来看,C语言的I/O功能相当底层:C语言将所有的文件操作符都抽象成了字节流(如标准输入流和标准输出流)。不像其他早期的编程语言,C语言没有对于从文件随机位置读取的直接支持:为了从一个文件的中间部分读取内容,程序员需要创建一个文件流,定向到文件的中间部分,然后从文件流中按顺序读取一个又一个字节。

文件输入输出流的模型因Unix操作系统而受到普及,而Unix操作系统本身也和C语言的发展相辅相成。绝大多数现代的操作系统从Unix身上继承了流,C家族中的许多编程语言也仅对C语言的输入输出界面做了少许改动(例如PHP)。C++标准库则从其语法上反映流的概念(具体参见iostream条目)。

函数原型概览[编辑]

多数与C语言输入输出相关的函数在<stdio.h>中定义(C++中的<cstdio>)。

  • 文件(流)访问
    • fopen
    • freopen
    • fflush
    • fclose
  • 二进制文件输入/输出
    • fread
    • fwrite
  • 非格式化输入/输出
    • fgetc/getc
    • fputc/putc
    • ungetc
    • fgets : 从指定流中读取n-1个字符或读完一行,参数str用于接收读取的字符串。在读取字符数没有超过字符串数组容量时会读取末尾的换行符。
    • fputs : 从指定流中读取一个字符串。
    • gets : 从stdin流中读取数据。可能会发生数据溢出,所以不安全,建议使用fgets以替代使用。和fgets不同的是,gets不会保存结尾的字符串。
    • puts : 输出一个字符串到stdout流。
  • 格式化输入/输出
    • scanf/fscanf/sscanf
    • printf/fprintf/sprintf
    • perror
  • 文件定位
    • ftell
    • fseek
    • fgetpos
    • fsetpos
    • rewind
  • 错误处理
    • feof
    • ferror
  • 文件操作
    • remove
    • rename
    • tmpfile 生成一个临时文件
    • tmpnam 生成一个唯一的文件名

常數[编辑]

在头文件<stdio.h>中定义的常量包括:

  • EOF
一个用于指明到达文件尾部,值为负的有符号整形数。
  • NULL
一个由宏展开的空指针常量。或者说,是一个代表在内存中不是合法地址的常量。
  • SEEK_CUR
一个传给函数fseek()的整形参数,要求文件指针以相对于当前位置的偏移量定位。
  • SEEK_END
一个传给函数fseek()的整形参数,要求文件指针以相对于文件尾部的偏移量定位。
  • SEEK_SET
一个传给函数fseek()的整形参数,要求文件指针以相对于文件头部的偏移量定位。

变量[编辑]

在头文件<stdio.h>中定义的变量包括:

  • stdin
标准输入流指针,负责传递来自标准输入的文字输入流(通常是键盘)。
  • stdout
标准输出流指针,负责传递到标准输出的文字输出流(通常是显示终端)。
  • stderr
标准错误输出流指针,传递来自所有输入输出中返回的错误信息(通常是显示终端)。

数据结构[编辑]

在头文件<stdio.h>中定义的数据结构包括:

  • FILE
    • 一个包含对文件流或文本流执行读入或输出所需信息的结构。其中包括
      • 一个文件描述符
      • 当前流的位置
      • 文件尾部指示
      • 错误指示
      • 指向流缓冲区的指针(如果适用)
  • size_t
    • sizeof操作符对应的无符号整形数类型。

参考[编辑]

ISO/IEC 9899:1999 specification (PDF).