[a] setvbuf / setbuf

#include <stdio.h>
int setvbuf(FILE *restrict fp, char *restrict buf, int mode, size_t size) //成功返回 0,出错返回非 0
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

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

[c] fopen / fdopen / freopen

#include <stdio.h>
FILE *fopen(const char *restrict path, const char *restrict type)
FILE *fdopen(int fd, const char *type)
FILE *freopen(const char *path, const char *type, FILE *fp)
//成功返回文件指针,出错返回 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

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

[e] fgetc / getc / getchar

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

[f] ferror / feof / clearerr

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

[g] ungetc

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

[h] fputc / putc / putchar

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

[i] fgets / fputs

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

[j] ftell / fseek / rewind

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

[k] fprintf / snprintf

#include <stdio.h>
int fprintf(FILE *restrict fp, const char *restrict format, ...) //返回成功输出的不包括结尾 \0 的字符数量
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

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

[m] fileno

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

[n] mkdtemp / mkstemp

#include <stdlib.h>
char *mkdtemp(char *template) //成功返回指向临时目录的指针,出错返回 NULL
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. linux 命令总结

    ①用find命令查找并删除文件 用脚本创建测试数据: [root@greymouster ceshidata]# for n in `seq 10`> do > date -s " ...

  2. 关于mysql数据库字符集优先级问题

    mysql数据库可以分别设置数据库字符集.表字符集和表字段字符集. 1.数据库字符集 < 表字符集 < 表字段(列)字符集. 例如数据库字符集为gbk -- GBK Simplified ...

  3. javascript检查移动设备是否支持重力方向感应

    javascript如何检查移动设备,如手机平台是否支持重力或者方向感应. 可以使用html5提供的重力和方向感应接口来判断. html5 中针对高端手机提供了重力感应和重力加速的接口,开发可以利用这 ...

  4. 寻找 nani (1)

    test.pl文件room(kitchen). room(office). room(hall). room('dining room'). room(cellar). location(desk,o ...

  5. 通过Dockerfile建立.NET Core mvc Image

    生成.NET core mvc code docker run -itd microsoft/dotnet:latestdocker psdocker attach containeridmkdir ...

  6. C#,委托,匿名委托,Lambda表达式

    1. 委托是什么? (1) 从数据结构来讲,委托是和类一样是一种用户自定义类型.  (2) 从设计模式来讲,委托(类)提供了方法(对象)的抽象.概括的说:委托是方法的抽象. 2. 委托类型的定义: 委 ...

  7. mysql 存储过程 游标 判断游标是否为空

    BEGIN DECLARE id long; DECLARE Done INT DEFAULT 0; DECLARE cashamount DECIMAL(10,2) DEFAULT 0.00; DE ...

  8. linq andregex

  9. plsql很好用的自定义设置【转载】

    本文是转载的,目的是方便自已随时可以查看.转载地址:http://blog.itpub.net/24496241/viewspace-740917/ 目的:方便自已随时可以查看 1.格式化SQL语句在 ...

  10. SQL Server合并版本

    1) 更新表(另一张表) a)        写法轻松,更新效率高: update table1 set field1=table2.field1,field2=table2.field2 from ...