UNIX高级编程-标准I/O

来源:互联网 发布:java实现文件上传代码 编辑:程序博客网 时间:2024/05/16 10:54

第5章标准I/O库

5.1 流和FILE对象

流的定向决定了所读\写的字符是单字节还是多字节

mode>0:宽定向即在未定向的流上使用一个多字节I/O函数

mode<0:字节定向即在未定向的流上使用一个单字节I/O函数

Int fwide(FILE *fp,int mode);//设置流定向

FILE对象的指针包含了标准I/O库管理该流的所有信息:用于实际I/O操作的文件描述符、指向用于该流缓冲区的指针,缓冲区的长度,当前缓冲区的字符数,出错标志等等

5.2缓冲

全缓冲(_IOFBF):填满标准I/O缓冲区后才进行实际I/O操作

对于flush(冲洗),有两种情况,如果是标准I/O库,flush操作实质上是将缓冲区中的数据写入磁盘上,如果是终端驱动程序方面,flush则表示丢弃缓冲区中的数据。

行缓冲(_IOLBF):当输入或者输出遇到换行符时,才执行I/O操作。

不带缓冲(_IONBF):标准I/O库不对字符进行缓冲存储

Void setbuf(FILE *restrict fp,char*restrict buf);  //设置打开或者关闭缓冲机制

Int setvbuf()FILE *restrict fp,char*restrict buf,int mode,size_t size);//精确的指定所需的缓冲类型

Int fflush(FILE *fp);

5.3 打开流

FILE *fopen(const char *restrictpathname,const char *restrict type);//打开指定的文件

FILE *freopen(const char *restrictpathname,const char *restrict type,FILE *restrict fp); //在指定流上打开文件

FILE *fdopen(int filedes,const char *type);//获取现有的文件描述符,使标准I/O流与描述符相关联

Type:决定了I/O流的读写方式

Int fclose(FILE *fp);//关闭打开的流

5..4读/写流

(1)每次读/写一个字符的I/O

(2),每次读/写一行的I/O

(3)直接I/O

输入函数:

Int getc(FILE *fp);//读一个字符,速度最快

Int fgetc(FILE *fp);

Int getchar(void);

判断是否出错或者到达文件尾端

Int ferro(FILE *fp);

Int feof(FILE *fp);

Void clearerr(FILE *fp);//清除标志

Int ungetc(int c,FILE *fp); //将字符压回流中,读出顺序与压回顺序正好相反

输出函数

Int putc(int c,FILE *fp);//写一个字符,速度最快

Int fputc(int c,FILE *fp);

Int putchar(int c);

 

每次读一行

Char *fgets(char *restrict buf,int n,FILE*restric fp);//每次读一行

每次写一行

Int fputs(const char *restrict str,FILE*restric fp); //将以null符终止的字符串写到指定的流中

5.5 二进制I/O

Size_t fread(void *restrict ptr,size_tsize,size_t nobj,FILE *restrict fp);

Size_t fwrite(const void *restrictptr,size_t size,size_t nobj,FILE *restrict fp);

ptr:读/写的对象缓冲区

size:每个对象的长度

nobj:读/写对象的个数

fp:文件流

5.6定位流

Int fgetpos(FILE *restrict fp,fpos_t*restrict pos);  //pos并保存文件位置指示器的当前值

Int fsetpos(FILE *fp,const fpos_t *pos);//设置文件位置指示器的当前值为pos

5.7格式化I/O

格式化输出

Int printf(const char *restrict format);//格式化数据写到标准输出

Int fprintf(FILE *restrict fp,const char*restrict format,…);//格式化数据写到特定的流

Int sprint(char *restrict buf,const char*restrict format);//格式化数据写道buf数组中·

Int snprintf(char *restrict buf,size_tn,const char * restrict format);// 格式化数据写道buf数组中,并在尾端加null字节

格式化输入

Int scanf(const char *restrict format,…);//从标准输入读格式数据

Int fscanf(FILE *restrict fp,const char*restrict format);//从指定流中读格式化数据

Int sscanf(const char *restrict buf,constchar *restrict format,…);//从指定buf数组中读格式化数据

Int fileno(FILE *fp);//获得文件流的描述符

0 0
原创粉丝点击