C小程序
来源:互联网 发布:魔兽世界掉落数据库 编辑:程序博客网 时间:2024/06/11 10:28
以下每个小程序,都在sleep(100)的时候,去cat文件12345.txt的内容
$cat 12345.txt
没有内容
$cat 12345.txt
没有内容, 说明对于驻在磁盘上的文件通常是由标准I/O库实施全缓存的, 所以即使遇到换行符,也不会输出。
$cat 12345.txt
abcde
由于设置了无缓冲,所以直接就输出到文件了。
$cat 12345.txt
abc
可以看到,换行符之前的字符串已经输出了,后面的还在缓冲区里没有输出的文件。另外让程序自行结束后,
$cat 12345.txt
abc
de
可以看到,剩下在缓冲区的内容,在程序退出时候,标准I/O库会自动关闭此流并刷新缓冲区。
- #include <stdio.h>
- main()
- {
- char * str = "abcde";
- FILE * fp = fopen("12345.txt", "w");
- fwrite(str, sizeof(char), strlen(str), fp);
- sleep(100);
- }
没有内容
- #include <stdio.h>
- main()
- {
- char * str = "abcde\n";
- FILE * fp = fopen("12345.txt", "w");
- fwrite(str, sizeof(char), strlen(str), fp);
- sleep(100);
- }
没有内容, 说明对于驻在磁盘上的文件通常是由标准I/O库实施全缓存的, 所以即使遇到换行符,也不会输出。
- #include <stdio.h>
- main()
- {
- char * str = "abcde";
- FILE * fp = fopen("12345.txt", "w");
- setbuf(fp, NULL); //设置无缓冲
- fwrite(str, sizeof(char), strlen(str), fp);
- sleep(100);
- }
abcde
由于设置了无缓冲,所以直接就输出到文件了。
- #include <stdio.h>
- main()
- {
- char * str = "abcde";
- char * buf = (char *)malloc(20);
- FILE * fp = fopen("12345.txt", "w");
- setvbuf(fp, buf, _IOLBF, 20); //设置行缓冲
- fwrite(str, sizeof(char), strlen(str), fp);
- sleep(100);
- }
$cat 12345.txt
abcde
这个结果很让我奇怪,我本来以为我设置了一个20长度的行缓冲区,但是我只是输出6个字符,没有填满缓冲区,所以不应该有输出到文件,但是没想到,在sleep的时候去cat文件,发现内容已经写到了文件中,说明行缓冲区已经被填满。。。我很疑惑,然后我尝试把行缓冲区的大小扩大到200
#include <stdio.h>
main()
{
char * str = "abcde";
char * buf = (char *)malloc(200);
FILE * fp = fopen("12345.txt", "w");
setvbuf(fp, buf, _IOLBF, 200);
fwrite(str, sizeof(char), strlen(str), fp);
sleep(100);
}
$cat 12345.txt
没有内容。扩大了行缓冲区后,这次没有内容输出到文件。所以我猜想内核肯定也会利用这个缓冲区做一些事情,而不只是单单把要输出的内容放进去,所以如果这个行缓冲区的大小比较小的话,虽然看起来能容纳下要输出的内容,但是很可能已经被系统内核的一些信息占了一些空间,所以有一点点输出也许就填满了缓冲区,从而就刷新到了文件里。不知道我这个理解对不对????
- #include <stdio.h>
- main()
- {
- char * str = "abc\nde"; //在要输出的字符串中间加上换行符,强制刷新缓冲区
- char * buf = (char *)malloc(200);
- FILE * fp = fopen("12345.txt", "w");
- setvbuf(fp, buf, _IOLBF, 200);
- fwrite(str, sizeof(char), strlen(str), fp);
- sleep(100);
- }
abc
可以看到,换行符之前的字符串已经输出了,后面的还在缓冲区里没有输出的文件。另外让程序自行结束后,
$cat 12345.txt
abc
de
可以看到,剩下在缓冲区的内容,在程序退出时候,标准I/O库会自动关闭此流并刷新缓冲区。
0
上一篇:可变参数va_list的理解和使用
下一篇:leetcode(2)
相关热门文章
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- 彻底搞定C语言指针详解-完整版...
给主人留下些什么吧!~~
评论热议
阅读全文
0 0
- 一些c小程序
- C语言小程序
- C测试小程序
- C语言小程序
- c/c++小程序
- C语言小程序
- c 语言小程序
- C/C++小程序
- C语言小程序
- C基本小程序
- C语言小程序
- c语言小程序
- C语言小程序
- c语言小程序
- C语言小程序
- c的小程序
- C小程序
- c语言小程序
- Linux应用编程之静态链接库和动态链接库
- Lua基础1
- leetcode(1)
- 标准I/O缺陷
- 可变参数va_list的理解和使用
- C小程序
- leetcode(2)
- 笔试题(2)
- dwarf程序
- 关于直播,所有的技术细节都在这里了
- Linux多线程2-2_线程的生命周期
- 查找指定字符串在某个字符串中的出现次数
- 【数据结构】中对n个数字右移k位
- 协同进程
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
詹雯婷唱功
唱功戏
世界公认唱功第一人
如何提高唱功
新垣结衣唱功
苏朵唱功为什么这么烂
西城男孩唱功
专业人士评价腾格尔唱功
怎样练歌才能提高唱功
唱名
忍把浮名换了浅斟低唱
唱名和音名对照表
音名唱名对照表
音名唱名对照表图片
唱名和音名
钢琴唱名
五线谱音名唱名对照表
无名之辈谁唱的
简谱唱名
歌曲名
想唱就唱
唱k
好唱
唱啊
一起唱
唱巴下载
我要和你唱
唱歌怎么唱
唱不完的歌
唱着歌
我们唱的歌
一直唱着歌
大家都会唱的歌
有首歌这么唱
有首歌这样唱
好唱的歌
唱吧手机版下载
唱吧会员兑换中心
唱吧下载
蒙面唱将放手吧
下载唱吧