fgetc库函数使用
来源:互联网 发布:阿里云工程师的待遇 编辑:程序博客网 时间:2024/04/29 05:41
fgetc函数从文件流里取出下一个字节并把它作为一个字符返回。当它到达文件尾部或者出现错误时,它返回EOF。怎么区分这两种情况呢?用ferror或feof来判断。(这段话来自经典书籍Linux程序设计)。
int c;while((c = fgetc(fp)) != EOF) fputc(c, out);if(!feof(fp)) // ferror(fp), 这里判断{ printf("Error\n");}
如果有人这么写:
while(!feof(fp)){ c = fgetc(fp); fputc(c, out);}
这个就有问题了。如果fgetc读完最后一个字符后,feof(fp)依然返回0(没有结束)。只有再fgetc(fp)一次后,feof(fp)才为非零。这样的话,对于后面这段代码,最后一次while循环时,fgetc取出来的是-1(EOF)。这个我试验了。所以对于第一段代码,一定要注意后面的判断;第二段代码是错误的。
fgetc/fputc函数处理时,由于FILE结构内部带有缓冲,等这个缓冲满时才真正调用系统调用写到文件。那么如果我想验证这个内部缓冲有多大,用什么办法好呢?我刚才实验了个办法:一个线程调用fputc往里写,另外一个通过read读取,看第一次read成功时,读出多少字符。这个想法有个假设:一个线程不断的fputc往文件写,一旦填满内部缓冲,就要写到文件,这时另外一个阻塞在read那里的线程马上读出数据返回。但是这个假设不一定成了。从试验结果看这个办法不行。实验结果:nread = read(fd, buf, sizeof(buf); nread始终等于buf的size。还有没有其它办法呢?在网上没有找个好办法。回头好好想想。
刚才想到个办法:用strace工具查看系统调用次数。从文件中fgetc字符。当读取个数<=4096时,只有1次read系统调用,而读取4097个字符时,有2次read系统调用。由此可断定我的系统中FILE内部缓冲是4096字节。
- fgetc库函数使用
- C库函数——fgetc函数
- fgetc fputc的使用
- fgetc()
- fgetc
- fgetc
- fgetc
- fgetc
- 魔鬼存在于细节—标准库函数fgetc()
- 库函数fopen/fgetc/fputc实现两个文件内容的复制
- fgetc()函数的简单使用
- fputc()与fgetc()函数的使用
- 使用fgetc实现fgets的功能
- fgetc和fputc交叉使用时候fseek的使用很重要
- Linux下输入函数fgetc, fgets, getc, getchar, gets使用
- ctime库函数的使用
- C++库函数使用
- readline库函数的使用
- java基础之 JAVAC的用法
- Hadoop userlog日志丢失原因
- 基于epoll实现的一个简单web服务器
- android lunch 分析
- windows goldengate配置
- fgetc库函数使用
- 自己动手写搜索引擎(常搜吧历程三#搜索#)(Java、Lucene、hadoop)
- Oracle数据库的impdp导入操作以及dba_directories使用方法
- poj 1182 食物链 并查集
- ROR中unit_test遇到的问题
- ping代码
- C++运算符之类型转换
- Couchbase Server 2.0.1企业版发布
- request.getParameter和request.getAttribute之间的区别