`
leili
  • 浏览: 174794 次
社区版块
存档分类
最新评论

《APUE》:对各个标准I/O流打印缓冲状态

阅读更多

《Unix环境高级编程》这本书附带了许多短小精美的小程序,我在阅读此书的时候,将书上的代码按照自己的理解重写了一遍(大部分是抄书上的),加深一下自己的理解(纯看书太困了,呵呵)。此例子在Ubuntu10.04上测试通过。


//《APUE》:程序5-3
//对各个标准I/O流打印缓冲状态
#include <stdio.h>
#include <unistd.h>
#include <libio.h>
#include <stdlib.h>

void pr_stdio(const char *, FILE *);

int main(void)
{
	FILE *fp;
	fputs("enter any character\n", stdout);
	if( getchar() == EOF )
	{
		fprintf(stderr, "Getchar error\n");
		exit(1);
	}
	fputs("one line to standard error\n", stderr);

	pr_stdio("stdin", stdin);
	pr_stdio("stdout", stdout);
	pr_stdio("stderr", stderr);

	//我的系统上找不到/etc/motd这个文件,所以用一个普通的txt文件代替
	fp = fopen("output.txt", "r");
	if( NULL == fp )
	{
		fprintf(stderr, "fopen error\n");
		exit(1);
	}
	if( EOF == getc(fp) )
	{
		fprintf(stderr, "getc error\n");
		exit(1);
	}
	pr_stdio("output.txt", fp);
	return 0;
}

void pr_stdio(const char *name, FILE *fp)
{
	printf("stream = %s,  ", name);
	if( fp->_IO_file_flags & _IO_UNBUFFERED )
		printf("unbuffered");
	else if( fp->_IO_file_flags & _IO_LINE_BUF )
		printf("line buffered");
	else
		printf("fully buffered");
	printf(", buffer size = %d\n", 
		fp->_IO_buf_end - fp->_IO_buf_base);
}


运行示例(加下划线的为输入):

qch@ubuntu:~/code$ gcc temp.c -o temp
qch@ubuntu:~/code$ ./temp
enter any character
(键入回车键)
one line to standard error
stream = stdin,  line buffered, buffer size = 1024
stream = stdout,  line buffered, buffer size = 1024
stream = stderr,  unbuffered, buffer size = 1
stream = output.txt,  fully buffered, buffer size = 4096
qch@ubuntu:~/code$ ./temp < output.txt > std.out 2>std.err
qch@ubuntu:~/code$ cat std.err
one line to standard error
qch@ubuntu:~/code$ cat std.out
enter any character
stream = stdin,  fully buffered, buffer size = 4096
stream = stdout,  fully buffered, buffer size = 4096
stream = stderr,  unbuffered, buffer size = 1
stream = output.txt,  fully buffered, buffer size = 4096


结论:
    从此可见,该系统默认的是:当标准输入,输出连终端时,它们是行缓冲的。行缓冲的长度是1024;当将这个流重定向到文件时,它们就变成全缓冲的,其缓冲区的长度是该文件系统优先选用的I/O长度;还有,标准出错是非缓冲的,而普通文件被系统默认是全缓冲的。


更多详细信息请查看java教程网 http://www.itchm.com/forum-59-1.html
分享到:
评论

相关推荐

    APUE(UNIX环境高级编程)——文件I/O篇

    本章开始讨论UNIX系统,先说明可用的文件I/O函数——打开文件、读文件、写文件等等。 大多数UNIX文件I/O只需用到5个函数: open ...本章所说明的函数经常被称之为不带缓存的I/O(与标准I/O 函数相对照

    apue.h 《UNIX环境高级编程》 头文件

    相信很多初学《UNIX环境高级编程》的朋友都会遇到一个问题,运行里面的实例时就出现问题,提示 "错误:apue.h:没有那个文件或目录". apue.h是作者自定义的一个头文件,包括程序所需的常用头文件及出错处理函数。...

    My-APUE:存储我的APUE代码和注释

    我的APUE 一。前言 1.阅读心得 断断续续每天早上抽出下午的时间差不多用了3个月看完了这本书,期间也顺带学习了makefile,gcc,valgrind等工具(学习编程是很有必要接触Linux的,可惜我接触的比较晚,之前的学习总是...

    apue头文件

    编译UNIX高级环境编程,缺少apue.h文件的解决方法

    APUE_UNIX环境高级编程

    书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了众多应用...

    UNIX环境高级编程 第二版 APUE_2nd

    书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了多个应用...

    apue:来自http的源代码包-Source code learning

    apue:来自http的源代码包

    APUE程序清单B-2 输出至标准出错文件的出错处理函数

    书本APUE后面的附录清单中的代码,用于使书本的例程中的err_sys等函数可以被使用。具体使用方法可以参见:blog.csdn.net/fanfank 中的《APUE代码注记》这篇博客,如果你还没见到这篇博客……证明我还没写好……

    unix环境高级编程apue.h

    Unix环境高级编程内附源代码,apue.h,放到/usr/include下边即可

    apue 代码

    apue

    APUE中文第二版UNIX.rar

    本书[APUE中文UNIXpdf完整版]全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进 程控制、进程间通信以及...

    APUE::four_leaf_clover:APUE的练习或测试代码

    -i 显示文件的 i 节点编号 -d 命令将文件夹当作文件对待,而不是递归地深入 / /. /.. 的 i 节点编号都相同均为 2。在文件系统中,i 节点存放文件的绝大部分信息,以及指向数据块的指针。i 节点相同代表文件(目录...

    rust-apue:UNIX环境中的高级编程。 Rust中的代码

    APUE手册中的程序(UNIX:registered:环境中的高级编程)。 进步 第1章:简介 第2章:无文件:() 第3章:fileio 第4章:filedir 去做 列表 TODO: ... 如何建造 export DYLD_LIBRARY_PATH=/Applications/Xcode...

    APUE:unix环境下的高级编程代码&ppt

    APUE每章节的代码和课件

    UNIX系统中apue.h

    初学《UNIX环境高级编程》的朋友都会遇到一个问题,运行里面的实例(download: http://www.apuebook.com/)时就出现问题,提示 "错误:apue.h:没有那个文件或目录".

    APUE:APUE(Unix环境中的高级编程)的个人作业答案

    为什么创造这个项目 此项目为《 UNIX环境高级编程》的课后习题个人答案,这种偏实际应用的书,需要配合每一章后面的习题使用效果更佳。 每一章的习题答案放在独立的目录中,代码以习题号命名,例如第一章第一题的...

    apue:我的“UNIX环境高级编程”在线课程资源汇编

    而《UNIX环境高级编程》(APUE, Advanced Programming in UNIX Environment)无疑是这个领域的圣经,是每位开发者必读的神作。精准的用语、精良的语言组织,经历了漫长岁月的千锤百炼,可谓无出其右。数年来,这本书曾...

    APUE (UNIX环境高级编程(pdf 中文版)) part2

    本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库,PostScript 打印机驱动程序,...

    APUE(UNIX环境高级编程)

    本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库,PostScript 打印机驱动程序,...

Global site tag (gtag.js) - Google Analytics