APUE第五章标准I/O库

使用标准IO库时,进程(或者是shell)自动打开并关联到程序运行窗口的标准输入输出流对象,为标准输入,标准输出,标准出错,这些流对象引用的文件,与不带缓冲的IO函数使用的文件描述符,它们关联的文件对是相同的,这些文件应该指的就是那些窗口,窗口在显示器上(显示器是文件),如果使用了重定向,那么所谓的文件,就是硬盘上的指定文件。也就是说,流对象(标准IO使用)与文件描述符(不带缓冲的IO使用),它们关联到相同的文件。

程序清单5-2用fgets和fputs将标准输入复制到标准输出

#include "apue.h"

int main(void)
{
    char buf[MAXLINE];

    while (fgets(buf, MAXLINE, stdin) != NULL)
    {
        if (fputs(buf, stdout) == EOF)
        {
            err_sys("output error");
        }
    }

    if (ferror(stdin))
    {
        err_sys("input error");
    }

    exit(0);
}
all: mycat getcputc fgetsfputs
mycat: mycat.c
	g++ -g -Wall mycat.c ../lib/libapue.a -I ../include -o mycat
getcputc: getcputc.c
	g++ -g -Wall getcputc.c ../lib/libapue.a -I ../include -o getcputc
fgetsfputs: fgetsfputs.c
	g++ -g -Wall fgetsfputs.c ../lib/libapue.a -I ../include -o fgetsfputs
clean:
	rm mycat getcputc fgetsfputs

时间: 2024-10-06 19:54:04

APUE第五章标准I/O库的相关文章

APUE学习笔记:第五章 标准I/O库

5.1 引言 标准I/O库处理很多细节,例如缓冲区分配,以优化长度执行I/O等.这些处理不必担心如何使用正确的块长度.这使得它便于用户使用,但是如果不较深入地了解I/O库函数的操作,也会带来一些问题 5.2 流和FILE对象 对于ASCII字符集,一个字符用一个字节表示.对于国际字符集,一个字符可用多个字节表示.标准I/O文件流可用于单字节或多字节字符集. 流的定向决定了所读.写的字符是单字节还是多字节的.当一个流最初被创建时,它并没有定向.如若在未定向的流上使用一个多字节I/O函数,则将该流的

APUE读书笔记-第五章 标准I/O库

今天草草的把第四章结了,后面的内容分析的也不是很详细,就连书中的例子都没有怎么实验,还是等以后有机会吧. 从5.3节开始研究起吧,这一节主要谈了一个进程预定义的3个流,分别是标准输入.标准输出和标准错误,通过stdin.stdout.stderr引用.这里要和进程中的文件描述符STDIN_FILENO.STDOUT_FILENO.STDERR_FILENO相区分. /* Standard streams. */ extern struct _IO_FILE *stdin; /* Standard

《APUE》-第五章标准IO库

大多数UNIX应用程序都使用I/O库,本章说明了该库所包含的所有函数,以及某些实现细节和效率方面的考虑.同时需要重点关注标准I/O使用了缓冲的技术,但同时也是因为它的出现,产生了很多细节上的问题. 流和FILE对象 unix系统调用的函数都是针对文件描述符操作的.而标准I/O库,它们的操作则是围绕流进行的.当用标准I/O库打开或创建一个文件时,使一个流与一个文件相关联. 关于流定向的问题,当一个流刚被创建时,它并没有定向,我们可以在未定向的流上使用一个多字节I/O函数或者单字节的函数. #inc

APUE学习笔记(第五章 标准I/O)

本章讲述标准I/O库 流和FILE对象 对于标准I/O库,它们的操作是围绕流进行的.流的定向决定了所读.写的字符是单字节还是多字节的. #include <stdio.h> #include <wchar.h> int fwide(FILE *fp,int mode); fwide函数可用于流的定向.根据mode参数的不同值,fwide函数执行不同的工作 若mode参数值为负,fwide将试图使指定的流是字节定向的 若mode参数值为正,fwide将试图使指定的流是宽定向的 若mo

APUE(5)---标准I/O库 (3)

十.定位流 #include <stdio.h> long ftell(FILE *fp); //若成功,返回当前文件位置指示:若出错,返回-1L int fseek(FILE *fp, long offset, int whence); //若成功,返回0:若出错,返回-1L void rewind(FILE *fp); 对于一个二进制文件,whence可以为SEEK_SET/SEEK_CUR/SEEK_END;对于文本文件,whence只能是SEEK_SET,并且offset只能是:0(后

第五章 标准I/O

5.1 引言 本章说明标准 I/O 库.因为不仅在 UNIX 上,而且在很多操作系统上都实现了此库,所以它由 ISO C 标准说明. 标准 I/O 库处理很多细节,例如缓冲区分配,以优化长度执行 I/O 等.这些处理使用户不必担心如何选择使用正确的块长度(如3.9节所述).这使得它便于用户使用,但是如果不叫深入地了解 I/O 库函数的操作,也会带来一些问题. 标准 I/O 库是由 Dennis Ritchie 在1975年左右编写的.令人惊讶的是,经过30年后,对标准 I/O 库只做了极小的修改

APUE(5)---标准I/O库 (2)

六.读和写流 一旦打开了流,则可在3种不同类型的非格式化I/O中进行选择,对其进行读.写操作:1)每次一个字符的I/O,一次读或写一个字符,如果刘时代缓冲的,则标准I/O函数处理所有缓冲:2)每次一行的I/O.如果想要一次读或写一行,则使用fgets和fputs.每行都以一个换行符终止.当调用fgets时,应说明能处理的最大行长.3)直接I/O(这个术语来自ISO C标准,有时也被称为二进制I/O,一次一个对象的I/O.面向记录的I/O或面向结构的I/O).fread和fwrite函数支持这种类

APUE 学习笔记(四) 标准I/O库

1.流与FILE对象 unix I/O系统调用都是针对文件描述符的 标准C的I/O函数都是针对流(文件指针)的,我们使用一个流与一个文件相关联 2.缓冲 标准I/O库提供缓冲的目的就是尽可能减少read和write系统调用的使用次数 标准I/O提供三种类型的缓冲: (1) 全缓冲:在填满标准I/O缓冲区后才进行实际I/O操作,磁盘上的文件通常是全缓冲,第一次I/O操作时调用malloc获得需要使用的缓冲区 (2)行缓冲:输入输出遇到换行符时,标准I/O库执行I/O操作.涉及终端时(标准输入和标准

第5章标准I/O库总结

1 fwide函数试图设置流的定向(流的定向决定了读写单字节还是多字节字符) int fwide(FILE *fp,int mode) 宽定向返回正值,字节定向返回负值,为定向返回0 已定向流不会改变流的定向 2 setbuf函数中指定的缓冲区的长度为BUFSIZ,这个常量在stdio.h中定义 3 freopen和fdopen函数 FILE *freopen(char *pathname,const char *type,FILE *fp) FILE *fdopen(int filedes,c