UNIX环境C语言编程(4)-标准IO库

来源:互联网 发布:淘宝红包充话费 编辑:程序博客网 时间:2024/05/22 06:28

1、缓冲

文件指针:stdinstdoutstderr
缓冲方式:全缓冲、行缓冲、无缓冲
可以通过setbuf()setvbuf()更改缓冲方式
int fflush(FILE *fp);

  刷新缓冲区

 

2、打开/关闭流

FILE *fopen(const char *pathname,const char *type);

  打开一个指定的文件

FILE *freopen(const char *pathname,const char *type, FILE *fp);

  打开一个指定的文件,重新关联fp,通常用于重定向

FILE *fdopen(intfiledes,const char *type);

  操作文件描述符,转换为文件指针

同时以读写方式打开文件时:

  一个输出操作不能紧跟一个输入操作,其间必须加入fflush,fseek,fsetpos,rewind

  一个输入操作不能紧跟一个输出操作,其间必须加入fseek,fsetpos,rewind

int fclose(FILE *fp); //关闭流

 

3、读/写操作

int getc(FILE *fp);   intfgetc(FILE *fp);   intgetchar(void);

  每次读入一个字符,注意函数的返回值类型,不要使用char

  getcfgetc的区别:

  getc可能是宏,它的参数不能是带有副作用的表达式;

  fgetc必须是函数(可以使用它的地址);

  getc可能比fgetc更快;

int ferror(FILE *fp); //错误检测
int feof(FILE *fp); //是否到达文件结尾
int ungetc(int c, FILE *fp); //回送一个字符
int putc(int c, FILE *fp); //输出一个字符
int fputc(int c, FILE *fp); //输出一个字符
int putchar(int c); //输出一个字符到stdout

 

4、每次读写一行

char *fgets(char *buf,int n, FILE  *fp);

  读取一行,最多n - 1个字符

  不推荐使用gets()

int fputs(const char *str, FILE *fp);

  并不自动添加换行符

 

5、二进制I/O

size_t fread(void *ptr,size_t size,size_tnobj, FILE *fp);
size_t fwrite(const void *ptr,size_t size, size_t nobj, FILE *fp);
二进制I/O需要注意:

  通常只能读取在同一台机器上生成的文件;

  更严格的说,只能读取同一个程序生成的文件;

 

6、流的定位

long ftell(FILE *fp);
int fseek(FILE *fp,long offset, int whence);
rewind()
off_t ftello(FILE *fp); // singleunix标准
int fseeko(FILE *fp,off_t offset,int whence);
int fgetpos(FILE *fp,fpos_t *pos); // ISO C
int fsetpos(FILE *fp,constfpos_t *pos);
三组函数支持的偏移量大小依次递增

 

7、实现细节

int fileno(FILE *fp);
获取文件指针对应的文件描述符

 

8、临时文件

char *tmpnam(char *ptr);
FILE *tmpfile(void);

  tmpfile创建一个临时文件(类型w+),在关闭该文件或程序结束时将自动删除

0 0