您的位置:首页 > 运维架构 > Linux

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下无效)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: