一、注意缓冲类型:全缓冲、行缓冲和不带缓冲。
1.标准出错流stderr通常是不带缓冲的。
2.涉及终端设备的流,比如stdin,一般是行缓冲的。
3.其它情况都是全缓冲。
可以更改缓冲类型,通过setbuf和setvbuf函数。
可以通过fflush冲洗输出流缓冲区,即将缓冲区内容写入文件中。
fflush参数传递NULL时,表示将冲洗所有输出流。
程序正常结束的时候,会冲洗缓冲区的输出数据,丢弃缓冲区的输入数据,并关闭所有打开的标准I/O流。
二、标准I/O函数采取了最优读写性能时的buf大小BUFSIZE,UNIX中一般定义为stat结构成员中st_blksize所指定的值。
三、读、写流函数分三类:每次一个字符、每次一行、直接I/O。
分别为:
1.getc, fgetc, getchar; putc, fputc, putchar
2.gets, fgets; puts, fputs
3.fread; fwrite;
注意:
getchar、getc、fgetc返回值都是int型的(目的是将出错返回也包括进来)。
putc、fputc、putchar返回值也是int型。
gets不对要写入的缓冲区进行检测,需要程序员确保写入内容不会超过缓冲区大小。如char str[2]; gets(str);当输入hello,即产生缓冲区溢出问题。
[canlynet@dc ~]$ cat test.c
#include <stdio.h>
int main(void)
{
char str[2];
char buf[2];
gets(str);
puts(str);
puts(buf);
return 0;
}
[canlynet@dc ~]$ gcc -o test test.c
/tmp/ccSY7eFA.o: In function `main':
test.c:(.text+0x11): warning: the `gets' function is dangerous and should not be used.
[canlynet@dc ~]$ ./test
hello
hello
��hello
[canlynet@dc ~]$
gets并不将换行符存入缓冲区中,fgets却会。
puts会添加一个换行符,fputs不会。
标准I/O函数读取文件时,无论出错还是达到文件尾,都返回负值-1(宏定义为EOF),但是流的FILE对象中维持了两个标志用于区分,采用函数ferror和feof可以检测到底是出错了还是达到文件末尾了。
分享到:
相关推荐
对构建器的定义要涉及函数过载的概念(因为可能同时有几个构建器)。随后要讨论的是清除过程,它并非肯定如想象的那么简单。用完一个对象后,通常可以不必管它,垃圾收集器会自动介入,释放由它占据的内存。这里详细...
建议在/mnt里建几个/mnt/cdrom、/mnt/floppy、/mnt/mo等目录,当作目录的专用挂载点。举例而言,如要挂载下列5个设备,其执行指令可能如下 (假设都是Linux的ext2系统,如果是Windows XX请将ext2改成vfat): 软盘 ==...
我不是DOS高手(绝非nnmm谦虚),考虑到通用性、兼容性、方便大家学习,我制作的这些启动盘也不是全功能的完美作品,我只是想让“菜鸟”朋友们通过这些启动盘来了解DOS,学习DOS,把它做为学习DOS的一个契机。...
创建了几个String Object? 答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。 38.abstract class和interface有什么区别? 答: 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于...
这个逻辑模型实际上提供了这几个概念: Cubes (立方体)、维度( Dimensions )、层次( Hierarchies )、级别( Levels )、和成员( Members )。而一个 schema 文件就是编辑这个 schema 的一个 xml 文件。在这个...
以“%”开头,[第几个数值$][flags][宽度][.精确度][格式] printf()的引入是为了照顾c语言程序员的感情需要 格式化输出 Formatter;格式化输入 Scanner;正则表达式 输出格式控制: 转义符: \ddd 1到3位8...
一个进程池的服务器程序 下面做了非常简单的http服务器,该服务器只能接收Get请求。 流程大概如下: 1,父进程listen,创建pipe(下面所有父子进程之间的通信都用该pipe) 2,父进程预fork n个子进程 3,各个子...
答:在设计高频电路用电路板有许多注意事项,尤其是GHz等级的高频电路,更需要注意各电子组件pad与印刷pattern的长度对电路特性所造成的影响。最近几年高频电路与数位电路共享相同电路板,构成所谓的混载电路系统...
20_信息系统框架集成第三方产品案例_几个重要的面向对象思想_传智扫地僧 21_作业 文档和源码 01_上一次课程回顾 02_数组指针语法梳理 03_函数指针语法梳理_传智扫地僧 04_函数指针做函数参数思想剖析_传智扫地僧 05_...
同时,还需要区分物理内存地址和虚拟内存地址这两个概念。 5.1 内存管理概念 5.1.1 物理内存概念(Physical Memory Address) 5.1.2 虚拟内存地址概念(Virtual Memory Address) 5.1.3 用户模式地址和...
同时,还需要区分物理内存地址和虚拟内存地址这两个概念。 5.1 内存管理概念 5.1.1 物理内存概念(Physical Memory Address) 5.1.2 虚拟内存地址概念(Virtual Memory Address) 5.1.3 用户模式地址和...
在类库中出现每一个异常,都需要一个惟一错误处理,在类库中使用异常处理很合适<BR><BR><BR>16.3 其他的错误处理技术:<BR><BR>处理异常的方法:<BR>1、 在程序可以忽略异常(忽略异常在大型公用软件和关键处理...
在这两个阶段屮,需要我们去完成的就是编译阶段的工作,也就是说:我们需要把我们 想要札器完成的工作用Jaa语言表达出来,写成Java源文件,然后把源文件进行编译,形 成 class文件,最后就可以在JaⅦa运行环境中运行了。...
的,所以我们可以把系统分为以下几个模块:数据处理电路、显示电路、待测信 号产生电路、待测信号整形放大电路,电源电路。 2.2 主要开发工具和平台 2.2.1 原理图和印刷电路板图设计开发工具:PROTEL DXP Protel DXP...