apue第5 6章

1.标准错误流不带缓冲,打开至终端设备的流是行缓冲的,否则是全缓冲的

2.文件描述符STDIN_FILENO STDOUT_FILENO和STDERR_FILENO对应的文件指针是stdin、stdout和stderr,这三个文件指针定义在头文件<stdio.h>中

3.setbuf

主要作用是设置缓冲

buf通常是一个字符数组,长度为BUFSIZE,在此之后该流就是全缓冲的,将其设为NULL就关闭缓冲

4.fflush

强行冲洗一个流,此函数将所有未写的数据都被传送至内核(缓冲区)

5.打开流

打开流一般是fopen相关函数,而open是打开文件相关函数,opendir是打开文件夹相关函数,太绕了,我快记不住了。

第一个函数需要有路径名pathname和type

第二个需要路径名pathname、type和文件指针,用于重定向。

第三个需要文件描述符和type

type参数指定对该I/O流的读写方式

6.fclose函数

7.读写流

(1)一次读一个字符

(2)每次一行I/O

 这两个函数都指定了缓冲区的地址,读入的行将送入其中。gets从标准输入读,而fgets则从指定的流读。

对于fgets,必须指定缓冲的长度n,此函数一直读到下一个换行符为止,但是不超过n-1个字符,读入的字符被送入缓冲区。该缓冲区以null字节结尾。如若该行包括最后一个换行符的字符数超过n-1,则fgets只返回一个不完整的行,但是,缓冲区总是以null字节结尾。对fgets的下一次调用会继续读该行。

最好不要使用gets函数,因为不能指定缓冲区长度,可能会造成缓冲区溢出

(3)直接IO. fread和write函数支持这种类型的1O,每次1O操作读或写某种数量对象,而每个对象具有指定的长度。这两个函数常用于从二进制文件中每次读或写一个结构。:节将说明这两个函数。

size是一个元素的大小,nobj是要写的对象个数

8.定位流

主要是ftell和fseek函数

对于一个二进制文件,其文件位置指示器是从文件起始位置开始度量,并以字节为度量单位的。 ftell用于二进制文件时,其返回值就是这种字节位置。为了用fseek定位一个二进制文件,必须指定一个字节offser,以及解释这种偏移量的方式. whence的值与3.6节中lseek函数的相同: SEEK_SET表示从文件的起始位置开始, SEEK_CUR表示从当前文件位置开始, SEEK_END表示从文件的尾端开始. IsO C并不要求一个实现对二进制文件支持SEEK-END规格说明,其原因是某些系统要求二进制文件的长度是某个幻数的整数倍,结尾非实际内容部分则填充为0。但是在UNIX中,对于二进制文件,则是支持SEEK-END的。

9.格式化IO

10.内存流相关

我们已经看到,标准10库把数据缓存在内存中,因此每次一字符和每次一行的10更有效。我们也可以通过调用setbuf或setvbuf函数让V/O库使用我们自己的缓冲区。在SUSv4中支持了内存流。这就是标准10流,虽然仍使用FILE指针进行访问,但其实并没有底层文件。所有的1/0都是通过在缓冲区与主存之间来回传送字节来完成的。我们将看到,即便这些流看起来像文件流,它们的某些特征使其更适用于字符串操作。

有3个函数可用于内存流的创建,第一个是fmemopen函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值