免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 蓝色键盘
打印 上一主题 下一主题

高级测试,这段代码的输出是什么? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2004-01-16 22:48 |只看该作者

高级测试,这段代码的输出是什么?

原帖由 "cacaty" 发表:
行缓冲
取消缓冲
setvbuf(stdout, NULL, _IONBF, 0);


没错,因为stdin,stdout,stderr都是行缓冲

论坛徽章:
0
22 [报告]
发表于 2004-06-01 10:47 |只看该作者

高级测试,这段代码的输出是什么?

我没有用过fork,但如果真是子进程把父进程copy 过来的话,就应该会是输出两个hello,这是和\n绝对没有关系!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
23 [报告]
发表于 2004-07-14 14:16 |只看该作者

高级测试,这段代码的输出是什么?

看了帖子,涨见识!

论坛徽章:
1
15-16赛季CBA联赛之四川
日期:2016-02-15 17:12:32
24 [报告]
发表于 2004-07-14 21:45 |只看该作者

高级测试,这段代码的输出是什么?

int main()
{
int pid;
char a[]="abcdefg\n\n";
printf("%s",a);//是否说这条语句就是两次输出
pid=fork()
if(pid==0)
;
else
return 0;
}

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
25 [报告]
发表于 2004-07-15 08:31 |只看该作者

高级测试,这段代码的输出是什么?

原帖由 "wujiajia" 发表:
fg\n\n";
printf("%s",a);//是否说这条语句就是两次输出
pid=fork()
if(pid==0)
;
else
return 0;
}


实验过了,不是估计是printf函数直接吧'\n'给弄进去了。

论坛徽章:
0
26 [报告]
发表于 2006-09-22 11:53 |只看该作者
printf得缓冲区在用户空间还是内核空间?

论坛徽章:
0
27 [报告]
发表于 2006-09-22 12:49 |只看该作者
加了 \n 的输出的确只有一个 Hello。
没有加 \n 的输出,两个 Hello 中间还带了点东西,那个符号和我系统命令提示符一样,所以我尝试把命令行提示符改成 # 再试,结果一连串试验结果如下:


  1. $ ./t1
  2. Hello$ Hello

  3. $ echo $PS1
  4. $

  5. $ PS1=#
  6. #./t1
  7. HelloHello#

  8. #PS1=$
  9. $./t1
  10. Hello$Hello
复制代码


我是 C 的新手,不懂了,请教。
用的系统是 FreeBSD 6.1,gcc 版本 3.4.4。

[ 本帖最后由 rardge 于 2006-9-22 12:51 编辑 ]

论坛徽章:
0
28 [报告]
发表于 2006-09-22 13:03 |只看该作者

回复 1楼 蓝色键盘 的帖子

确实和缓冲有关
#include <stdio.h>

int main()
{
  setbuf(stdout, NULL);  

  printf("Hello");

  fork();

  return 0;

}
就不会输出 二次了

论坛徽章:
0
29 [报告]
发表于 2006-09-22 14:39 |只看该作者
原帖由 chj1982 于 2006-9-22 11:53 发表
printf得缓冲区在用户空间还是内核空间?


很明显,用户态

论坛徽章:
0
30 [报告]
发表于 2006-09-22 15:02 |只看该作者
printf后fflush(stdout)
就不会2个HELLO了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP