Linux C IO编程学习笔记(第一天:标准IO)

来源:互联网 发布:linux 网卡物理地址 编辑:程序博客网 时间:2024/05/29 11:51

首先说一下输入输出的概念,所谓的输入输出就是相对于程序而言的,凡是讲数据输送到程序中的过程就是输入,相反就是输出

然后,在linux中的IO分为两种,一种是文件io:是由内核提供的,比较简洁,低级IO,没有缓存,另一种是标准IO:是由标准C库提供,功能复杂高级IO,有缓存

那么缓存可分为以下几种:
1.行缓冲:系统不多见,多用于跟用户交互,当一行满的时候刷新缓冲,一行以\n结束
2.满缓冲:当满的时候才刷新缓冲

3.无缓冲


linux中对文件的处理都是以文件流形式的:
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.csdn.net/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.csdn.net/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.csdn.net/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


0 0
原创粉丝点击