来源在些:
下面贴内容。
下面的一段代码,想先把标准输出关闭,printf一些东西;然后把标准输出再恢复;
可是却达不到效果,aaaa。。。 和 bbbb。。都打出来了;
可是:如果把注释掉的那句“//printf("itfd is %d\n", tfd);”去掉注释的话,aaaa。。就打不出来了。。。
高手明白这是咋回事吗??
#include
#include
int main()
{
int tfd = -1;
tfd = dup(STDOUT_FILENO);
//printf("itfd is %d\n", tfd);
close(STDOUT_FILENO);
printf("aaaaaaaaaaaaaaaaaa\n");
dup2(tfd, STDOUT_FILENO);
close(tfd);
printf("bbbbbbbbbbbbbbbbbb\n");
return 0;
}
发信人: ikaikai (Sigh), 信区: LinuxDev
标 题: Re: 一个奇怪的东西,困惑
发信站: 水木社区 (Fri Feb 25 16:17:23 2011), 站内
这个问题很好玩
你理解下面几点就明白了
1. printf是行缓存
2. printf第一次调write的时候会用fstat(1)看1是不是打开的
3. 如果1没打开,缓存保留
4. 第二次以后printf就不检查fstat了
这完全是个printf的实现问题
阅读(2317) | 评论(1) | 转发(0) |