还是有关fork的问题,fork在一个函数中调用,我被搞胡涂了

wayne92 2005-05-12 05:57:06
#include<stdio.h>
void createprocess(){
int t;
printf("123");
t=fork();
if(t!=-1){
if(t==0) printf("b");

if(t>0) printf("a");
}
}

int main(){
createprocess();
}
结果是123a123b
为什么123会打印两次呢?
fork在打印123的语句下面啊,问了老师,他也讲不清楚.





...全文
153 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
colorwu 2005-05-13
  • 打赏
  • 举报
回复
if(t!=-1)这句改成if(t = 0)或if(t > 0)
qfxx 2005-05-13
  • 打赏
  • 举报
回复
同意 nichotilikai(lk)的话
fork共享内存,包括缓冲区
而缓冲区没有清空啊
在第一个printf后加'\n'或用fflush
就不会出现这个现象了
mprogrammer 2005-05-13
  • 打赏
  • 举报
回复
向nichotilikai(lk) 学习!
sumless 2005-05-12
  • 打赏
  • 举报
回复
我们的那本书上真的有写吗?
我怎么找不到?
我刚又看了一便第四章,没有啊
wayne92 2005-05-12
  • 打赏
  • 举报
回复
谢谢nichotilikai(lk)
我明白了。确实是我看书不仔细。
我正在看《UNIX系统编程》。
我们正在上操作系统,老师给了一些试验,要在LINUX环境下完成。所以刚开始学。
可以给些学习方面的建议吗?谢谢!
nichotilikai 2005-05-12
  • 打赏
  • 举报
回复
楼主读书似乎不仔细。这样的问题,基本上在书上讲fork的地方,都会说明。
printf出现在fork前,似乎应该出现一次,但由于没有换行符,或者用fflush将缓冲区内容输出,所以在fork时,“123”没有输出,还在缓冲区内,它的内容也被子进程所复制。父进程和子进程的缓冲区内,都有“123”。
mprogrammer 2005-05-12
  • 打赏
  • 举报
回复
用fork产生出一个子进程嘛!和父进程享有公用的资源!就好比一个进程的COPY,然后同时执行,如果按照你函数的例子讲就是 t = 0 代表是子进程在执行,t = -1 就是父进程在执行!明白了没?

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧