[a] setvbuf / setbuf

  1. #include <stdio.h>
  2. int setvbuf(FILE *restrict fp, char *restrict buf, int mode, size_t size) //成功返回 0,出错返回非 0
  3. void setbuf(FILE *restrict fp, char *restrict buf) 
  • mode:_IONBF / _IOLBF / _IOFBF,即无缓冲、行缓冲、全缓冲
  • setvbuf:若 mode 为 _IONBF,忽略 buf 与 size 的值;若 buf 为 NULL 且为缓冲模式,可不指定 size,系统将自动分配
  • setbuf 通过将 buf 设置为 NULL 或 BUFSIZ 关闭或开启缓冲,缓冲的模式由系统根据连接的对象自动选择

[b] fflush

  1. #include <stdio.h>
  2. int fflush(FILE *fp) //成功返回 0,出錯返回 EOF 
  • 手动冲洗待输出的标准 I/O 缓冲,对输入方向的缓冲无效

[c] fopen / fdopen / freopen

  1. #include <stdio.h>
  2. FILE *fopen(const char *restrict path, const char *restrict type)
  3. FILE *fdopen(int fd, const char *type)
  4. FILE *freopen(const char *path, const char *type, FILE *fp)
  5. //成功返回文件指针,出错返回 NULL 
  • type:r / w / a / r+ / w+ / a+,对应的 open 标志分别为 O_RDONLY / O_WRONLY|O_CREAT|O_TRUNC / O_WRONLY|O_CREAT|O_APPEND / O_RDWR / O_RDWR|O_CREAT|O_TRUNC / O_RDWR|O_CREAT|O_APPEND
  • fdopen 基于已打开的文件描述符生成流指针
  • freopen 用于重定向,以新打开的流指针取代目标 fp(如 stdout / stdin 等)

[d] fclose

  1. #include <stdio.h>
  2. int fclose(FILE *fp) //成功返回 0,出错返回 EOF 
  • 冲洗待输出数据,丢弃所有输入数据,关闭流指针

[e] fgetc / getc / getchar

  1. #include <stdio.h>
  2. int fgetc(FILE *fp)
  3. int getc(FILE *fp)
  4. int getchar(void)
  5. //成功返回下一个字符,到达文件末尾或出错返回 EOF 
  • 用于读取单个字符,getc 实现为宏,getchar 相当于 getc(stdin),fgetc 实现为函数
  • 返回 EOF 时,需要使用 feof 与 ferror 区分到达文件末尾与出错两种状态

[f] ferror / feof / clearerr

  1. #include <stdio.h>
  2. int ferror(FILE *fp)
  3. int feof(FILE *fp)
  4. //若条件为真,返回非 0,否则返回 0
  5. void clearerr(FILE *fp) 
  • clearerr 用于清除 EOF 及错误标志

[g] ungetc

  1. #include <stdio.h>
  2. int ungetc(int c, FILE *fp) //成功返回字符 c,出错返回 EOF 
  • 将指定字符压送回流中

[h] fputc / putc / putchar

  1. #include <stdio.h>
  2. int fputc(char c, FILE *fp)
  3. int putc(char c, FILE *fp)
  4. int putchar(char c)
  5. //成功返回字符 c,出错返回 EOF 
  • putchar 等同于 putc(stdout),fputc 则实现为函数

[i] fgets / fputs

  1. #include <stdio.h>
  2. char *fgets(char *restrict buf, int n, FILE *restrict fp) //成功返回 buf,到达文件尾或出错返回 NULL
  3. int fputs(const char *restrict str, FILE *restrict fp) //成功返回非负值,出错返回 EOF 
  • fgets 从流中每次读取一行至 buf 中,至多读取 n - 1 个字符,以 \0 字符结束,遇到 \n 则停止读取,\n 会被读入
  • fputs 将一个字符串写入到流中,不会自动添加 \n,\0 字符不会写出

[j] ftell / fseek / rewind

  1. #include <stdio.h>
  2. long ftell(FILE *fp) //成功返回当前位置,出错返回 -1
  3. int fseek(FILE *fp, long offset, int whence) //成功返回 0,出错返回 -1
  4. void rewind(FILE *fp) 
  • whence 的值可以为 SEEK_CUR / SEEK_SET / SEEK_END
  • rewind 用于将流指针位置重置到文件开头

[k] fprintf / snprintf

  1. #include <stdio.h>
  2. int fprintf(FILE *restrict fp, const char *restrict format, ...) //返回成功输出的不包括结尾 \0 的字符数量
  3. int snprintf(char *restrict buf, size_t n, const char *restrict format, ...) //同上 
  • snprintf 用于将至多 n - 1 个字符写入到 buf 中
  • format 格式:'-' 减号表示左对齐(默认右对齐),'+' 加号表示显示正负号,‘LF’ 指 long double,‘lld’ 指 long long int,‘z’ 指 size_t 类型,'j' 指 intmax_t 或 uintmax_t

[l] fscanf / sscanf

  1. #include <stdio.h>
  2. int fscanf(FILE *restrict fp, const char *restrict format, ...)
  3. int sscanf(const char *restrict buf, const char *restrict format, ...)
  4. //成功返回输入的项数,出错或到达文件末尾返回 EOF

[m] fileno

  1. #include <stdio.h>
  2. int fileno(FILE *fp) //返回与该流相关联的文件描述符

[n] mkdtemp / mkstemp

  1. #include <stdlib.h>
  2. char *mkdtemp(char *template) //成功返回指向临时目录的指针,出错返回 NULL
  3. int mkstemp(char *template) //成功返回临时文件的描述符,出错返回 -1
  • template 必须是以 ‘XXXXXX’ 结尾的可读写字符串(数组),函数执行之后,template 的值会更新为实际的目录名或文件名
  • 临时目录的权限是 0700,临时文件的权限是 0600
  • 临时文件创建完成后处于打开状态,且不会自动删除,需要手动 unlink

[05]APUE:标准 I/O 库的更多相关文章

  1. [apue] 标准 I/O 库那些事儿

    前言 标准 IO 库自 1975 年诞生以来,至今接近 50 年了,令人惊讶的是,这期间只对它做了非常小的修改.除了耳熟能详的 printf/scanf,回过头来对它做个全方位的审视,看看到底优秀在哪 ...

  2. APUE(5)---标准I/O库 (2)

    六.读和写流 一旦打开了流,则可在3种不同类型的非格式化I/O中进行选择,对其进行读.写操作:1)每次一个字符的I/O,一次读或写一个字符,如果刘时代缓冲的,则标准I/O函数处理所有缓冲:2)每次一行 ...

  3. APUE(5)---标准I/O库 (3)

    十.定位流 #include <stdio.h> long ftell(FILE *fp); //若成功,返回当前文件位置指示:若出错,返回-1L int fseek(FILE *fp, ...

  4. APUE之第5章——标准I/O库

    一.知识回顾:文件I/O 文件 I/O 是不带缓冲的 I/O(unbuffered I/O),指每个 read 和 write 都调用内核中的一个系统调用. 对于内核而言,所有打开的文件都通过文件描述 ...

  5. APUE(5)---标准I/O库 (1)

    一.引言 标准I/O库不仅是UNIX,许多i其他操作系统都实现了标准I/O库,所以这个库由ISO C标准说明.标准I/O库处理很多细节,如缓冲区分配,以及优化的块长度执行I/O等.这使得它便于用户使用 ...

  6. APUE 学习笔记(四) 标准I/O库

    1.流与FILE对象 unix I/O系统调用都是针对文件描述符的 标准C的I/O函数都是针对流(文件指针)的,我们使用一个流与一个文件相关联   2.缓冲 标准I/O库提供缓冲的目的就是尽可能减少r ...

  7. 《UNIX环境高级编程》(APUE) 笔记第五章 - 标准I/O库

    5 - 标准I/O库 Github 地址 1. 标准 I/O 库作用 缓冲区分配 以优化的块长度执行 I/O 等 使用户不必担心如何选择使用正确的块长度 标准 I/O 最终都要调用第三章中的 I/O ...

  8. 标准I/O库之临时文件

    ISO C标准I/O库提供了两个函数以帮助创建临时文件. #include <stdio.h> char *tmpnam( char *ptr ); 返回值:指向唯一路径名的指针 FILE ...

  9. 标准I/O库之标准I/O的效率

    程序清单5-1 用getc和putc将标准输入复制到标准输出 #include "apue.h" int main( void ) { int c; while(( c = get ...

  10. UNIX高级环境编程(7)标准IO函数库 - 二进制文件IO,流定位,创建临时文件和内存流

    1 二进制IO(Binary IO) 在前一篇我们了解了逐字符读写和逐行读写函数. 如果我们在读写二进制文件,希望以此读写整个文件内容,这两个函数虽然可以实现,但是明显会很麻烦且多次循环明显效率很低. ...

随机推荐

  1. VMWare MAC系统调整磁盘

    VMware,打开虚拟文件,调整磁盘大小. 从40G调整到80G 进入虚拟机,打开终端 diskutil list;diskutil resizeVolume disk0s2 80GB http:// ...

  2. HTML5来回拖动实例

    <html> <meta charset="utf-8"> <script> //规定被拖动的数据 function tdwhat(ev,obj ...

  3. 我读汤姆大叔的深入理解js(二)

    继续汤姆大叔的js之旅. 揭秘命名函数表达式 函数表达式和函数声明 汤姆大叔在博客中引用ECMA规范:函数声明必须带有标识符,函数表达式可以省略.对于我来说这些概念的东西真是不所适从.还是大叔的实例带 ...

  4. CSS3制作同心圆进度条

    1.css代码 此处在制作进度条时,是旋转进度条的半圆(红色),背景使用灰白(如果使用红色作为背景,旋转灰白遮罩,在浏览器中可能会有渲染bug) .wrapper{ display:block;pos ...

  5. offer

    八月份仿真实验室国赛以后,我并没有开始做一些关于找工作的准备,而是在做自己感兴趣的cocos2d-x,大概花了一个星期的时间从安装平台到查资料写了一个flappybird小游戏,将近开学了才把找工作的 ...

  6. WCF Routing 服务

    WCF4.0支持路由机制,通过RoutingService实现请求分发.拦截处理. 一.应用场景 1.暴露一个endpoint在外网,其余服务部署于内网: 2.请求分发,能对服务做负载功能: 二.WC ...

  7. Rethrowing exceptions and preserving the full call stack trace

    refer:http://weblogs.asp.net/fmarguerie/archive/2008/01/02/rethrowing-exceptions-and-preserving-the- ...

  8. WCF服务二:创建一个简单的WCF服务程序

    在本例中,我们将实现一个简单的计算服务,提供基本的加.减.乘.除运算,通过客户端和服务端运行在同一台机器上的不同进程实现. 一.新建WCF服务 1.新建一个空白解决方案,解决方案名称为"WC ...

  9. C#删除datable空行

    //去除dataTable空行 public DataTable RemoveEmpty(DataTable dt) { List<DataRow> removelist = new Li ...

  10. WPF功能点

    if ("TextBoxBase".Contains(Keyboard.FocusedElement.GetType().BaseType.Name)) { return; } 1 ...