linux编程-标准IO
2014-12-18 23:30
197 查看
标准IO简介
1. 标准IO与三种缓冲区关联:
(1)全缓冲
通过标准IO对文件(或设备)进行操作时,通常缓冲区满之后,才会进行实际的IO操作(即写到内核)。对文件进行操作时通常使用全缓冲。
(2)行缓冲
通过标准IO对文件(或设备)进行操作时,通常缓冲区满之后,或者遇到换行符时,才会进行实际的IO操作(即写到内核)。标准输入输出通常使用行缓冲。
(3)无缓冲
每次操作通过标准IO函数操作时,都会直接与内核交互操作。标准错误通常使用无缓冲,以尽快显示错误消息。
2. 标准IO流的定向:
标准IO流支持单字节定向和多字节定向,即设置读取一个字符时,是按照单字节读取还是按多字节(宽字节)读取。关于流的定向,有以下特征:
(1)在未定向的流上,调用单字节IO函数,将把流设置为单字节定向;在未定向的流上调用多字节IO函数,将把流设置为多字节定向。
(2)在未定向的流上,调用fwide函数,设置流的定向。
#include <wchar.h>
int fwide(FILE *stream, int mode);
(3)在已定向的流上调用fwide(file, 0) 查询流的定向
(4)调用freopen清除流的定向
#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fd, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE
*stream);
3. 修改一个流的缓冲
#include <stdio.h>
void setbuf(FILE *stream, char *buf);
void setbuffer(FILE *stream, char *buf, size_t size);
void setlinebuf(FILE *stream);
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
通常可以修改缓冲的大小,缓冲的类型,自己创建缓冲或者让IO负责创建缓冲
4. 冲洗缓冲
#include <stdio.h>
int fflush(FILE *stream);
当参数为NULL时,将导致所有缓冲被冲洗。
5. 流的读写特征
在未进行冲洗,定位等操作的情况下,一般读未到文件末尾,不能进行写(输出);
在写时,如果调用冲洗,定位等操作,一般不能读(输入)
简单的说,就是读写之间,需要有定位操作或fflush操作,根据实际的测试,该限制在(ubuntu下无效)
1. 标准IO与三种缓冲区关联:
(1)全缓冲
通过标准IO对文件(或设备)进行操作时,通常缓冲区满之后,才会进行实际的IO操作(即写到内核)。对文件进行操作时通常使用全缓冲。
(2)行缓冲
通过标准IO对文件(或设备)进行操作时,通常缓冲区满之后,或者遇到换行符时,才会进行实际的IO操作(即写到内核)。标准输入输出通常使用行缓冲。
(3)无缓冲
每次操作通过标准IO函数操作时,都会直接与内核交互操作。标准错误通常使用无缓冲,以尽快显示错误消息。
2. 标准IO流的定向:
标准IO流支持单字节定向和多字节定向,即设置读取一个字符时,是按照单字节读取还是按多字节(宽字节)读取。关于流的定向,有以下特征:
(1)在未定向的流上,调用单字节IO函数,将把流设置为单字节定向;在未定向的流上调用多字节IO函数,将把流设置为多字节定向。
(2)在未定向的流上,调用fwide函数,设置流的定向。
#include <wchar.h>
int fwide(FILE *stream, int mode);
(3)在已定向的流上调用fwide(file, 0) 查询流的定向
(4)调用freopen清除流的定向
#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fd, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE
*stream);
3. 修改一个流的缓冲
#include <stdio.h>
void setbuf(FILE *stream, char *buf);
void setbuffer(FILE *stream, char *buf, size_t size);
void setlinebuf(FILE *stream);
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
通常可以修改缓冲的大小,缓冲的类型,自己创建缓冲或者让IO负责创建缓冲
4. 冲洗缓冲
#include <stdio.h>
int fflush(FILE *stream);
当参数为NULL时,将导致所有缓冲被冲洗。
5. 流的读写特征
在未进行冲洗,定位等操作的情况下,一般读未到文件末尾,不能进行写(输出);
在写时,如果调用冲洗,定位等操作,一般不能读(输入)
简单的说,就是读写之间,需要有定位操作或fflush操作,根据实际的测试,该限制在(ubuntu下无效)
相关文章推荐
- Linux编程-标准IO(3)
- Linux应用编程基础--(1)标准IO
- Linux编程-标准IO(4)-临时文件
- Linux系统编程:标准IO操作--索引对应路径下的文件
- 第一章Linux标准IO编程
- Linux系统编程:标准IO操作--索引对应路径下的文件
- linux系统编程之基础必备(二):C 标准IO 库函数与Unbuffered IO函数
- 二、linux IO 编程---系统调用和POSIX标准和标准IO
- 2.Linux应用编程——标准IO
- Linux编程-标准IO(2)
- 【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口
- 专题3 标准IO编程
- 标准C语言IO与Unix/Linux IO API比较
- (转)Linux IO多路复用之epoll网络编程
- 淘宝核心系统团队博客 | linux异步IO编程实例分析
- linux 内核驱动编程 简单例子 与_IO, _IOR, _IOW, _IOWR 宏解析
- linux 内核驱动编程 简单例子 与_IO, _IOR, _IOW, _IOWR 宏解析
- linux下的标准IO总结
- Linux文件IO编程
- Linux环境高级编程:文件IO