初学Linux--标准输入输出库
2017-09-01 20:57
344 查看
标准I/O的基本概念
标准I/O操作建立在文件操作API的基础上,提供更高层次的文件操作功能流
使用标准I/O库时,操作的是一个叫“流”的对象。在使用标准I/O访问文件时,系统内核返回流数据结构,所有后续操作都是对这个数据结构进行的。在文件操作中,这个流结构实际是一个指向FILE结构的指针。FILE结构保存了标准I/O库用于文件操作的相关信息。
缓存
在进行文件I/O操作时,对数据的读写并不直接对文件系统进行,而是对缓存进行,缓存在第一次调用标准I/O库进行I/O操作时,由系统自动调用malloc分配。标准I/O提供缓存的方式主要有一下三种:
- 全缓存:被填满才向文件系统刷新
- 行缓存:输入/输出过程中遇到换行符,向文件系统刷新
- 不缓存:不设置缓存机制
缓存的刷新除了系统自动进行外,也可以随时调用fflush系统调用手工刷新缓存。
可以在程序中改变默认缓存方式,标准I/O库提供为此提供了几个函数:setbuffer、setbuf、setlinebuf、setvbuf.
原型如下:
#include<stdio.h> void setbuf(FILE*_restrict_stream,char*_restrict_buf);//缓冲区大小固定为BUFSIZ void setbuffer(FILE*_restrict_stream,char*_restrict_buf,size_t_size); void setlinebuf(FILE*_stream); int setvbuf(FILE*_restrict_stream,char*_restrict_buf,int_modes,size_t_size);
无缓存模式,调用setbuf(stream,NULL)即可。
标准输入、标准输出以及标准错误输出
为了跟踪错误对错误进行留迹处理,有时需要将错误输出信息保存到文件中。Linux中进行输入重定向的符号”<”,输出重定向的符号”>>”和”>”。”>>”采取的是附加的方式。
使用标准I/O进行文件操作
打开关闭流文件#include<stdio.h> FILE*fopen(_const char*_restrict_filename,_const char*_restrict_modes); int close(FILE*_stream);
单字符读写
#include<stdio.h> int fgetc(FILE*_stream); int getc(FILE*_stream); int fputc(int_c,FILE*_stream); int putc(int_c,FILE*_stream); int getchar(void); int putchar(int _c);
getchar等价于getc(stdin),putchar等价于putc(c,stdout).
行方式读写
#include<stdio.h> char*fgets(char*_restrict_s,int_n,FILE*_restrict_stream); int fputs(_const char*_restrict_s,FILE*_restrict_restream);
_s:缓冲区;_n:流中读取的长度;_stream:流指针。
标准输入输出库还提供了两个函数用于想标准输入/输出写或读
#include<stdio.h> char*gets(char*_s); int puts(_const char*_s);
puts会向标准输出写入数据后,附加一个换行符。gets从标准输入读取一行后,并未对缓冲区_s的长度是否足够进行检查。
二进制方式读写
如果文件内容按照一定的方式存放,如果用行读写的话,读取到的数据就无法恢复原样,为此,标准I/O库提供了二进制读写方式。
#include<stdio.h> size_t fread(void*_restrict_ptr,size_t_size,size_t_n,FILE*_restrict_stream); size_t fwrite(_const void*_restrict_ptr,size_t _size,size_t_n,FILE*_restrict_s);//读取的记录个数
格式化输入/输出
#include<stdio.h> int printf(_const char*_restrict_format,...); int fprintf(FILE*_restrict_stream,_const char*_restrict_format,...); int sprintf(char*_restrict_s,_const char*_restrict_format,...); int scanf(_const char*_restrict_format,...); int fscanf(FILE*_restrict_restream,_const char*_restrict_format,...); int sscanf(_const char*_restrict_s,_const char*_restrict_format,...);
_format:指定输入输出的格式串。
在流文件中定位
#include<stdio.h> int fseek(FILE*_stream,long int_off,int _whence);//定位文件读写指针 long int ftell(FILE*_stream);//获取文件当前读写指针 void rewind(FILE*_stream);//定位文件指针到文件头
参考文献《Linux编程从入门到精通》
相关文章推荐
- 嵌入式linux上QT标准键盘输入的实现
- Linux基础之标准输入和输出
- Linux标准输入、输出和错误和文件重定向(转)
- linux标准输入输出错误输出
- APUE读书笔记-05标准输入输出库(7)
- 嵌入式linux上QT标准键盘输入的实现
- Linux基础之标准输入和输出
- 初学Java,IO之重定向标准输入\输出(四十五)
- Linux教程-标准输入/输出和重定向1. 标准输入与输出
- Linux - 标准输入(input)\输出(output)\错误(error) 详解
- linux的标准输入输出和重定向
- 分享:Linux标准输入/输出和重定向
- Linux标准输入/输出和重定向
- 嵌入式linux上QT标准键盘输入的实现(XXXX)
- Linux:标准输入、输出、错误
- Linux 中C语言如何清空标准输入流
- linux程序设计——把管道用作标准输入和输出(第十三章)
- Linux 标准 输入 输出 重定向. printf 不输出到屏幕的解决办法
- linux中的标准输出和输入
- 夺命雷公狗---linux NO:13 linux标准输入输出和标准错误