5.2流和file对象

#include <wchar.h>
int fwide(FILE *fp, int mode);
Returns: positive if stream is wide oriented,negative if stream is byte oriented,or 0 if stream has no orientation
  • mode 负:字节定向,mode 正:宽字节定向, mode 0:不设置流定向但是返回流定向值

5.4缓冲

IO缓冲方式:全缓冲(缓冲区满存入磁盘),行缓冲(收到换行符存入磁盘),不带缓冲
  1. 标准错误不缓冲
  2. 终端设备行缓冲
  3. 其他全缓冲
#include <stdio.h>
void setbuf(FILE *restrict fp, char *restrict buf );
int setvbuf(FILE *restrict fp, char *restrict buf, int mode,size_t size);
Returns: 0 if OK, nonzero on error
fp: 已打开的文件指针
buf:未未指定缓冲的流指定缓冲区
size: 制定的缓冲区大小
mode:
* _IOFBF 全缓冲
* _IOLBF 行缓冲
* _IONBF 不缓冲

5.5 打开流

#include <stdio.h>
FILE *fopen(const char *restrict pathname, const char *restrict type);
FILE *freopen(const char *restrict pathname, const char *restrict type,FILE *restrict fp);
FILE *fdopen(int fd, const char *type);
All three return: file pointer if OK, NULL on error
  • fopen 指定方式读取pathname路径名指定的文件
  • freopen 指定流上打开指定文件
  • fdopen 关联一和IO流和一个指定文件指针

5.6 读写流

#include <stdio.h>
int getc(FILE *fp);
int fgetc(FILE *fp);
int getchar(void);
All three return: next character if OK, EOF on end of file or error
#include <stdio.h>
int ferror(FILE *fp);
int feof(FILE *fp);
Both return: nonzero (true) if condition is true, 0 (false) otherwise
void clearerr(FILE *fp);
  • 每个问价对象维护一个出错标志和一个结束标志,clearerr清除这两个标志
#include <stdio.h>
int ungetc(int c, FILE *fp);
Returns: c if OK, EOF on error
  • 字符压回流中,顺序与读出相反(暂时写回缓冲区,并未写回磁盘)
#include <stdio.h>
int putc(int c, FILE *fp);
int fputc(int c, FILE *fp);
int putchar(int c);
All three return: c if OK, EOF on error
  • 行读入
#include <stdio.h>
char *fgets(char *restrict buf, int n, FILE *restrict fp);
char *gets(char *buf );
Both return: buf if OK, NULL on end of file or error
int fputs(const char *restrict str, FILE *restrict fp);
int puts(const char *str);
Both return: non-negative value if OK, EOF on error

5.9 二进制IO

#include <stdio.h>
size_t fread(void *restrict ptr, size_t size, size_t nobj,FILE *restrict fp);
size_t fwrite(const void *restrict ptr, size_t size, size_t nobj,FILE *restrict fp);
Both return: number of objects read or written
size : object size
nobj : number of object

5.10 定位流

#include <stdio.h>
long ftell(FILE *fp);
Returns: current file position indicator if OK, .1L on error
int fseek(FILE *fp, long offset, int whence);
Returns: 0 if OK, .1 on error
void rewind(FILE *fp); 流指针返回初始位置
#include <stdio.h>
int fgetpos(FILE *restrict fp, fpos_t *restrict pos);
将文件位置指示器存入pos
int fsetpos(FILE *fp, const fpos_t *pos);
将文件位置指示器设置为pos
Both return: 0 if OK, nonzero on error

5.11格式化IO

  • output
#include <stdio.h>
int printf(const char *restrict format, ...);
int fprintf(FILE *restrict fp, const char *restrict format, ...);
int dprintf(int fd, const char *restrict format, ...);
All three return: number of characters output if OK, negative value if output error
int sprintf(char *restrict buf, const char *restrict format, ...);
Returns: number of characters stored in array if OK, negative value if encoding error
int snprintf(char *restrict buf, size_t n,const char *restrict format, ...);
Returns: number of characters that would have been stored in array
if buffer was large enough, negative value if encoding error
  • input
#include <stdio.h>
int scanf(const char *restrict format, ...);
int fscanf(FILE *restrict fp, const char *restrict format, ...);
int sscanf(const char *restrict buf, const char *restrict format, ...);
All three return: number of input items assigned,EOF if input error or end of file before any conversion

APUE第五章:标准IO库的更多相关文章

  1. 《APUE》-第五章标准IO库

    大多数UNIX应用程序都使用I/O库,本章说明了该库所包含的所有函数,以及某些实现细节和效率方面的考虑.同时需要重点关注标准I/O使用了缓冲的技术,但同时也是因为它的出现,产生了很多细节上的问题. 流 ...

  2. C++ Primer 读书笔记: 第8章 标准IO库

    第8章 标准IO库 8.1 面向对象的标准库 1. IO类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream所定义的类型则用于 ...

  3. 《C++ Primer 4th》读书笔记 第8章-标准IO库

    原创文章,转载请注明出处:http://www.cnblogs.com/DayByDay/p/3936457.html

  4. c++ primer 学习杂记3【标准IO库】

    第8章 标准IO库 发现书中一个错误,中文版p248 流状态的查询和控制,举了一个代码例子: int ival; // read cin and test only for EOF; loop is ...

  5. [APUE]标准IO库(下)

    一.标准IO的效率 对比以下四个程序的用户CPU.系统CPU与时钟时间对比 程序1:系统IO 程序2:标准IO getc版本 程序3:标准IO fgets版本 结果: [注:该表截取自APUE,上表中 ...

  6. [APUE]标准IO库(上)

    一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...

  7. C5 标准IO库:APUE 笔记

    C5 :标准IO库 在第三章中,所有IO函数都是围绕文件描述符展开,文件描述符用于后续IO操作.由于文件描述符相关的操作是不带缓冲的IO,需要操作者本人指定缓冲区分配.IO长度等,对设备环境要求一定的 ...

  8. 文件IO函数和标准IO库的区别

    摘自 http://blog.chinaunix.net/uid-26565142-id-3051729.html 1,文件IO函数,在Unix中,有如下5个:open,read,write,lsee ...

  9. 高级UNIX环境编程5 标准IO库

    标准IO库都围绕流进进行的 <stdio.h><wchar.h> memccpy 一般用汇编写的 ftell/fseek/ftello/fseeko/fgetpos/fsetp ...

  10. 18、标准IO库详解及实例

    标准IO库是由Dennis Ritchie于1975年左右编写的,它是Mike Lestbain写的可移植IO库的主要修改版本,2010年以后, 标准IO库几乎没有进行什么修改.标准IO库处理了很多细 ...

随机推荐

  1. 三. ServerSocket用法

    一.构造ServerSocket 构造方法 (1)new ServerSocket( ) (2)new ServerSocket(int port,int backlog) (3)new Server ...

  2. CF 501C Misha and Forest 好题

    C. Misha and Forest   Let's define a forest as a non-directed acyclic graph (also without loops and ...

  3. 错误记录 git pull

    在安装open-falcon的nodata组件,更新库的时候,git pull 报错: You are not currently on a branch, so I cannot use any'b ...

  4. mysql 批量插入

    对于批量插入: 1.在建立唯一索引的情况下,,从前往后,如果遇到索引重复错误 则停止插入(前面的插入成功),错误后面的即使正确也不会插入 方法1:insert igore 后 解决此问题 (ignor ...

  5. serv-u设置被动模式注意的问题

    1.在“本地服务器”->设置->高级里面把端口范围设置一下: 2.在防火墙的入站规则里设置一下上面的端口范围

  6. JAVA元运算符,一元运算符,二元运算符,三元运算符

    一元运算符: 序号 一元运算符 说明 1 i++ 给i加1 2 i-- 给i减1 3 ++i 给i加1 4 --i 给i减1 i++;/*例:int i=1;i++;//先将i的值1赋值给i,然后i再 ...

  7. python爬取并计算成绩

    模拟登录后抓取成绩,计算绩点. # -*- coding: utf-8 -*- import urllib import urllib2 import cookielib import re impo ...

  8. [Flash&Flex] AS3.0 如何利用[Embed(source="...")]嵌入资源

    在flex和flashIDE中我们可以[Embed(source="...")]嵌入图片和swf等资源,但两者之间的嵌入方式又有所区别. flex示例: [Embed(source ...

  9. [Flex] ButtonBar系列——控制ButtonBar菜单是否可用

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  10. 微信JSSDK示例代码 笔记

    using System; using System.Collections.Generic; using System.Web; using System.IO; using System.Secu ...