APUE学习笔记一 标准IO库

1 有三种类型的缓冲策略  
无缓冲
块缓冲
行缓冲

通常所有文件都是块缓冲的。当文件 I/O操作在文件上发生时,将调用 malloc(3),获得一个缓冲。如果流指向一个终端(通常 stdout),那么它是行缓冲的。标准错误流 stderr 默认总是无 缓冲的。

2 对字符的操作

输入函数:
#include<stdio.h>
int getc(FILE *fp);
int fgetc(FILE *fp);
int getchar(void);

int ungetc(int c,FILE *fp)//将字符回送回流 成功则返回C,出错则返回EOF

getc是宏定义  fgetc是函数
三个函数以unsigned char类型转化为int的方式返回下一个字符,说明为不带符号的理由是,如果最高位为1也不会返回负值。要求返回整数的理由是,这样可以返回所有的字符类型、出错信息和到达文件尾部的指示值。EOF=-1;

#include<string.h>
char * strtok(char *s,const char *delim);

strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回下一个分割后的字符串指针。

输出函数:

int putc(int c,FILE *fp);
int fputc(int c,FILE *fp);
int putchar(int c);

3 每次一行I/O

char *fgets(char *buf,int n,FILE *fp);//将换行符一块返回
char *gets(char *buf); //不安全,不推荐使用

fgets必须指定缓存的长度n,此函数一直读到下一个新行符为止,但是不超过n-1个字符,读入的字符被放入到缓存,该缓存以null结尾。

int fputs(const char *str,FILE *fp);
int puts(const char *str);//默认输出到stdout,并且输出换行符

str必须以null结尾,但是null不写出。

4 二进制I/O

size_t fread(void *ptr,size_t size,size_t nobj,FILE *fp);
size_t write(void *ptr,size_t size,size_t nobj,FILE *fp);
两个常见用法:
1)读或写一个二进制数组
2)读或写一个结构

fread fwite都返回读写的对象数。
注意:这些函数不能用于夸网络读取数据

int fgetpos(FILE *fp,fpos_t *pos);
int fsetpos(FILE *fp,const fpos_t *pos);
fgetpos将文件位置指示器的当前值存入由pos指向的对象中。在以后调用fsetpos时,可以使用此值将流重新定位至该位置。

5 格式化I/O
#include<stdio.h>
int printf(const char *fromat,.....);
int fprintf(FILE *stream,const char *format,....);
int sprintf(char *str,consta char *format,.....);
int snprintf(char *str,size_t size,const char *format,...);

#include<stdio.h>
int scanf(const char *fromat,.....);
int fscanf(FILE *stream,const char *format,....);
int sscanf(char *str,const  char *format,.....);

int fileno(FILE *stream);返回相关联的文件描述符

 

6 判断是出错还是到达文件尾部
int ferror(FILE *fp);
int feof(FILE *fp);
当条件值真时返回非零
当条件为假时返回0

在FILE对象中,为每个流保留了两个标志:
出错标志
文件结束标志

调用clearerr可以清楚两个标志

转载于:https://www.cnblogs.com/wangtianxj/archive/2009/06/18/1505843.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值