首先说一下输入输出的概念,所谓的输入输出就是相对于程序而言的,凡是讲数据输送到程序中的过程就是输入,相反就是输出
然后,在linux中的IO分为两种,一种是文件io:是由内核提供的,比较简洁,低级IO,没有缓存,另一种是标准IO:是由标准C库提供,功能复杂高级IO,有缓存
那么缓存可分为以下几种:1.行缓冲:系统不多见,多用于跟用户交互,当一行满的时候刷新缓冲,一行以\n结束
2.满缓冲:当满的时候才刷新缓冲
3.无缓冲
1.文件流只关心流向,不关心大小,格式
2.系统流:stdin,stdout,stderr
标准IO函数
1.linux系统中的IO函数有两种:文件IO和标准IO,其中文件IO是由kernel提供的,而标准IO则是由C库提供的
2.其中,文件IO没有缓冲,而标准缓冲是有缓冲的,请看代码:
/*************************************************************************
> File Name: test.c
> Author: Baniel Gao
> Mail: createchance@163.com
> Blog: blog.youkuaiyun.com/createchance
> Created Time: Wed 25 Dec 2013 06:56:18 PM CST
************************************************************************/
#include <stdio.h>
int main(void)
{
printf("hello world");
while(1)
;
return 0;
}那么,这里的hello>/*************************************************************************
> File Name: test.c
> Author: Baniel Gao
> Mail: createchance@163.com
> Blog: blog.youkuaiyun.com/createchance
> Created Time: Wed 25 Dec 2013 06:56:18 PM CST
************************************************************************/
#include <stdio.h>
int main(void)
{
printf("hello world");
fflush(stdout);
while(1)
;
return 0;
}这样的话,hello world就能显示了,其实我们还可以修改缓冲区的特性。前面说过,缓冲区分为三中,在与用户交流的shell中,他的缓冲是行缓冲,必须等一行的结束也就是\n才能输出,所以可以使用加上\n的方法显示字符串。其实我们可以使用setbuf函数将缓冲区修改为无缓冲:
/*************************************************************************
> File Name: test.c
> Author: Baniel Gao
> Mail: createchance@163.com
> Blog: blog.youkuaiyun.com/createchance
> Created Time: Wed 25 Dec 2013 06:56:18 PM CST
************************************************************************/
#include <stdio.h>
int main(void)
{
printf("hello world");
setbuf(stdout, NULL);
while(1)
;
return 0;
}这里的setbuf函数的原型是:
void setbuf(FILE *stream, char *buf);
也就是讲缓冲区重定向为buf指向的区域中,如果我们将这个区域指向为NULL,那么也就是没有缓冲了!!其实也可以使用setvbuf函数,他可以将缓冲区设置为行缓冲,块缓冲,无缓冲,具体的使用方法请MAN
本文深入探讨Linux中的文件I/O处理方式及缓冲区机制,包括文件流概念、系统流介绍、标准IO函数及其缓冲特性,并通过示例展示如何修改缓冲区配置。
249

被折叠的 条评论
为什么被折叠?



