fork的问题
时间:2010-08-18
来源:互联网
- #include <stdio.h>
- #include <sys/types.h>
- #include <unistd.h>
-
- int main(void)
- {
- printf("one");
- fork();
- printf("two\n");
-
- return 0;
- }
onetwo
onetwo
为什么printf("one")也执行了两遍?
作者: rainfly100 发布时间: 2010-08-18

作者: rainfly100 发布时间: 2010-08-18
printf("two\n");
你是来没事找事的吧
作者: phy0077 发布时间: 2010-08-18
可能是IO缓冲的问题,我把第一个也加上换行符号结果就成了这样
[dave@dave ~]$ ./a.out
one
two
我再运行两下就恢复正常了
[dave@dave ~]$ ./a.out
one
two
two
作者: davelv 发布时间: 2010-08-18
printf("two\n");
你是来没事找事的吧
phy0077 发表于 2010-08-18 16:17
没有明白的意思
作者: rainfly100 发布时间: 2010-08-18
你把第一个printf改成
fprintf(stderr,"one");
试试
作者: chong232 发布时间: 2010-08-18
[dave@dave ~]$ ./a.out
one
two
davelv 发表于 2010-08-18 16:17
加了换行符结果是:
one
two
two
按我对fork的理解这个才是正确的,就是不明白不加换行符,结果跟我想的不一样,我觉得应该是
onetwo
two
作者: rainfly100 发布时间: 2010-08-18
子进程继承了父进程的很多东西,包括还在缓冲区中的那个字符串“one”
作者: chong232 发布时间: 2010-08-18
可以在第一个printf的后面加入fflush(stdout);来强制刷新缓存。
或者按照6楼所说的输出的stderr里面,stderr是不缓冲的。
作者: davelv 发布时间: 2010-08-18
子进程继承了父进程的很多东西,包括还在缓冲区中的那个字符串“one”
chong232 发表于 2010-08-18 16:23
哦,谢谢,那就是说没有加换行符,缓冲区就还有数据吧
作者: rainfly100 发布时间: 2010-08-18
作者: rainfly100 发布时间: 2010-08-18
对,换行符可以清缓冲
作者: chong232 发布时间: 2010-08-18
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28