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

1、缓冲

文件指针: stdin stdout stderr
缓冲方式:全缓冲、行缓冲、无缓冲
可以通过 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 ( int filedes , const char *type);

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

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

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

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

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

 

3、读/写操作

int getc (FILE * fp );    int fgetc (FILE * fp );    int getchar (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_t nobj , 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 ); // single unix 标准
int fseeko (FILE * fp , off_t offset, int whence);
int fgetpos (FILE * fp , fpos_t * pos ); // ISO C
int fsetpos (FILE * fp , const fpos_t * pos );
三组函数支持的偏移量大小依次递增

 

7、实现细节

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

 

8、临时文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值