Linux后台服务器编程。
分类: LINUX
2014-08-01 21:14:09
对一个进程预定义了三个流,并且这三个流可以自动的被进程使用,它们是:标准输入、标准输出、和标准错误。
标准I/O库提供缓冲的目的是尽可能减少使用read和write的次数。
标准I/O库提供了三种类型的缓冲:
1、全缓冲:在填满标准I/O缓冲区后进行实际I/O操作。对于驻留在磁盘上的文件通常是由标准I/O库实施全缓冲的。在标准I/O库方面,flush(冲洗) 意味着将缓冲区中的内容写到磁盘上。在终端驱动程序方面,flush(刷清)表示丢弃已储存在缓冲区中的数据。
2、行缓冲:当输入或输出遇到换行符时,标准I/O库执行I/O操作。
3、不带缓冲:标准I/O库不对字符进行缓冲储存。
标准出错stderr通常是不带缓冲的,这就使得出错信息可以尽快显示出来。
一、函数fopen
函数功能:打开一个文件
使用字符b作为type的一部分,则使得标准I/O系统可以区分文本文件和二进制文件。因为UNIX内核并不对这两种文件区分,所以在UNIX环境下指定字符b作为type的一部分实际上并无作用。除非流引用终端设备,否则按系统默认情况,流被打开时是全缓冲的。若流引用终端设备,则该流是行缓冲的。
二、fclose函数
函数功能:关闭一个打开的流
函数原型:int fclose(FILE* fp);
在该文件被关闭之前,冲洗缓冲区中的输出数据。丢弃缓冲区中的任何输入数据。
当一个进程正常终止时(直接调用exit函数,或从main函数返回),则所有带未写缓冲数据的标准I/O流都会被冲洗,所有打开的标准I/O流自动关闭。
三、读和写流
一旦打开了流,则可在三种不同类型的非格式化I/O中进行选择,对其进行读、和写操作:
(1)每次一个字符的I/O。一次读或写一个字符,如果流是带缓冲的,则标准I/O函数会处理所有缓冲。
(2)每次一行的I/O。如果想一次读或写一行,则使用fgets和fputs。每行都以换行符终止。
(3)直接I/O。fread和fwrite函数支持这种类型的I/O。
1、输入函数(一次读一个字符)
以下三个函数可用于一次读一个字符
这三个函数在返回下一个字符时,会将其unsigned char类型转换为int类型。在
注意,不管是出错还是到达文件结尾,这三个函数都返回同样的值(EOF)。为了区分这两种不同的情况,必须调用ferror或feof。
void clearerr(FILE* fp);
在大多数实现中,为每个流在FILE对象中维持了两个标志:
(1)出错标志
(2)文件结束标志
调用clearerr函数则清除这两个标志。
2、输出函数(一次输出一个字符)
3、每次一行I/O
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ; 功 能:从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功 返回 0。 参 数: buffer 用于接收数据的内存地址,大小至少是size*count字节. size 单个元素的大小,单位是字节 count 元素的个数,每个元素是size字节. stream 输入流 返回值:实际读取的元素个数.如果返回值与count不相同,则可能文件结尾或发生错误.从ferror和feof获取错误信息或检测是否到达文 件结尾.
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);注意:这个函数以二进制形式对文件进行操作,不局限于文本文件 返回值:返回实际写入的数据块数目 (1)buffer:是一个指针,对fwrite来说,是要输出数据的地址; (2)size:要写入内容的单字节数; (3)count:要进行写入size字节的数据项的个数; (4)stream:目标文件指针; (5)返回实际写入的数据项个数count。
四、定位流