摘要: 在UNIX系统中,标准I/O库最终都要调用文件I/O(read、write等)。每个标准I/O流都有一个与其相关联的文件描述符,可以对一个流调用fileno函数以获得其描述符。注意,fileno不是ISO C标准部分,而是POSIX.1支持的扩展。#include int fileno( FILE *fp );返回值:与该流相关联的文件描述符如果要调用dup或fcntl等函数,则需要此函数。为了了解你所使用的系统中标准I/O库的实现,最好从头文件开始。从中可以看到:FILE对象是如何定义的、每个流标志的定义以及定义为宏的各个标准I/O例程(例如getc)。程序清单5-3中的程序为三个标准流以及 阅读全文
posted @ 2014-01-05 20:31 ITtecman 阅读(588) 评论(0) 推荐(0) 编辑
摘要: 本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/。一、格式化输出执行格式化输出处理的是4个printf函数。#include int printf( const char *restrict format, ... );int fpritnf( FILE *restrict fp, const char *restrict fromat, ... );两个函数的返回值:若成功则返回输出字符数,若输出出错则返回负值int sprintf( char *restrict buf, const char *re 阅读全文
posted @ 2014-01-05 17:58 ITtecman 阅读(546) 评论(0) 推荐(0) 编辑
摘要: 有三种方法定位标准I/O流。(1)ftell和fseek函数。这两个函数自V7以来就存在了,但是它们都假定文件的位置可以存放在一个长整型中。(2)ftello和fseeko函数。Single UNIX Specification引入了这两个函数,可以使文件偏移量不必一定使用长整型。它们使用off_t数据类型代替了长整型。(3)fgetpos和fsetpos函数。这两个函数是由ISO C引入的。它们使用一个抽象数据类型fpos_t记录文件的位置。这种数据类型可以定义为记录一个文件位置所需的长度。需要移植到非UNIX系统上运行的应用程序应当使用fgetpos和fsetpos。#include lo 阅读全文
posted @ 2014-01-05 15:18 ITtecman 阅读(1057) 评论(0) 推荐(0) 编辑
摘要: 如果进行二进制I/O操作,那么我们更愿意一次读或写整个结构。因此,提供了下列两个函数以执行二进制I/O操作。#include size_t fread( void *restrict ptr, size_t size, size_t nobj, FILE *restrict fp );size_t fwrite( const void *restrict ptr, size_t size, size_t nobj, FILE *restrict fp );两个函数的返回值:读或写的对象数这些函数有两种常见的用法:(1)读或写一个二进制数组。例如,为了将一个浮点数组的第2-5个元素写至一个文件上 阅读全文
posted @ 2014-01-05 14:54 ITtecman 阅读(444) 评论(0) 推荐(0) 编辑
摘要: 程序清单5-1 用getc和putc将标准输入复制到标准输出#include "apue.h"intmain( void ){ int c; while(( c = getc( stdin )) != EOF ) if( putc( c, stdout ) == EOF ) err_sys( "output error" ); if( ferror( stdin )) err_sys( "input error" ); exit( 0 );}程序清单5-2 用fgets和fputs将标准输入... 阅读全文
posted @ 2014-01-05 14:23 ITtecman 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 下面两个函数提供每次输入一行的功能。#include char *fgets( char *restrict buf, int n, FILE *restrict fp );char *gets( char *buf );两个函数返回值:若成功则返回buf,若已到达文件结尾或出错则返回NULL这两个函数都指定了缓冲区的地址,读入的行将送入其中。gets从标准输入读,而fgets则从指定的流读。对于fgets,必须指定缓冲区的长度n。此函数一直读到下一个换行符为止,但是不超过n-1个字符,读入的字符(包括换行符)被送入缓冲区。该缓冲区以null字符结尾。如若该行(包括最后一个换行符)的字符数超过 阅读全文
posted @ 2014-01-05 11:24 ITtecman 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 一旦打开了流,则可在三种不同类型的非格式化I/O中进行选择,对其进行读、写操作:(1)每次一个字符的I/O。一次读或写一个字符,如果流是带缓冲的,则标准I/O会处理所有缓冲。(2)每次一行的I/O。如果想要一次读或写一行,则使用fgets和fputs。每行都以一个换行符终止。当调用fgets时,应说明能处理的最大行长。(3)直接I/O。fread和fwrite函数支持这种类型的I/O。每次I/O操作读或写某种数量的对象,而每个对象具有指定的长度。这两个函数常用于从二进制文件中每次读或写一个结构。直接I/O(direct I/O)这个术语来自ISO C标准,有时也被称为二进制I/O、一次一个对象 阅读全文
posted @ 2014-01-05 09:26 ITtecman 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 下列三个函数打开一个标准I/O流。#include FILE *fopen( const char *restrict pathname, const char *restrict type );FILE *freopen( const char *restrict pathname, const char *restrict type, FILE *restrict fp );FILE *fdopen( int filedes, const char *type );三个函数的返回值:若成功则返回文件指针,若出错则返回NULL这三个函数的区别是:(1)fopen打开一个指定的文件。(2)fr 阅读全文
posted @ 2014-01-05 08:21 ITtecman 阅读(1094) 评论(3) 推荐(0) 编辑