父进程结束了,子进程运行会出错?

will_g 2009-03-26 10:01:36
该程序 大概是

pid_t pid;
char str[30];

int main()
while((pid=fork())!=0);
if(pid==0)
{
printf("输入:");
gets(str);
while(strcmp(str,"end")!=0)
{
func(str); //对字符串作处理
printf("输入:");
gets(str);
}
}
else
{
waitpid(pid,NULL,0); //当没有这句时,出错,不停的输出"输入:"
return ;
}


哪位能给解释下,谢谢
...全文
148 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hsc1979 2009-04-02
  • 打赏
  • 举报
回复
像楼上的几位说的,不要用while循环创建子进程,改成这样要好些:


int main()
pid_t pid;
char str[30];
pid=fork();
if (pid<0)
{
printf("fork失败\n");
exit(-1);
}
if(pid==0)
{
printf("输入:");
gets(str);
while(strcmp(str,"end")!=0)
{
func(str); //对字符串作处理
printf("输入:");
gets(str);
}
}
else
{
waitpid(pid,NULL,0); //当没有这句时,出错,不停的输出"输入:"
//return ; //主程序里要用exit;退出,可以写成
exit(0);
}
will_g 2009-03-28
  • 打赏
  • 举报
回复
gets() 好像不读\n
will_g 2009-03-28
  • 打赏
  • 举报
回复
while((pid=fork())==-1); 创建进程错误才不停的创建吧 鸡没烤熟才烤,烤熟就不烤了 呵呵
will_g 2009-03-27
  • 打赏
  • 举报
回复
//你的子进程里不是只要不到end就一直打印吗?不对吗?

对啊,也应该要执行gets(str);

但是程序 会一直打印 “输入:输入:输入:输入:输入:输入:输入:输入:输入:输入:…………”
没有执行gets(str);
无知者无谓 2009-03-27
  • 打赏
  • 举报
回复
Bugs

Never use gets(). Because it is impossible to tell without knowing the data in advance how many characters gets() will read, and because gets() will continue to store characters past the end of the buffer, it is extremely dangerous to use. It has been used to break computer security. Use fgets() instead.
无知者无谓 2009-03-27
  • 打赏
  • 举报
回复
while((pid=fork())==-1);
你这是要烤机呢?不停的创建进程直到没法再创建。。。。
无知者无谓 2009-03-27
  • 打赏
  • 举报
回复
是while((pid=fork())==-1);
你这是要烤机呢?不停的创建进程知道没法再创建。。。。
T-Quake 2009-03-27
  • 打赏
  • 举报
回复
好像fgets()是执行了,但是由于你上次可能输入了,所以他会把'\n'也读了,所以造成不停的让你输入输入,可是又不能真正输入的问题,你得想办法吃掉 你第一次的'\n'
  • 打赏
  • 举报
回复
fork最好还是别写在while里,这样的习惯不好.
=-1,你就出错返回就可以了.

if(pid==0)
{
printf("输入:");
gets(str);
while(strcmp(str,"end")!=0)
{
func(str); //对字符串作处理
printf("输入:");
gets(str);
}
}
else
{
waitpid(pid,NULL,0); //当没有这句时,出错,不停的输出"输入:" //你的子进程里不是只要不到end就一直打印吗?不对吗?
return ;
}
will_g 2009-03-26
  • 打赏
  • 举报
回复
写错了 是while((pid=fork())==-1);
brookmill 2009-03-26
  • 打赏
  • 举报
回复
while((pid=fork())!=0); // 这是在做什么?
用ps命令看看,是不是fork了很多子进程

23,121

社区成员

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

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