免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2819 | 回复: 10
打印 上一主题 下一主题

关于UNIX进程! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-21 20:25 |只看该作者 |倒序浏览
就是UNIX高级环境编程的第一章的一个例子。
main()
{
        while(fgets(buf,1024,stdin)!=NULL)
         {
               if(pid = fork()<0)
                  printf("error...");
               printf("pid=[%d]",pid);
               if(pid == 0)
                   printf("ok...");
         }
          exit(0);
}

有一点不太明白,就是第二个printf()为什么会运行两遍???而且都是pid=0!!!谢谢各位大侠帮小弟解惑!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-04-21 20:53 |只看该作者
kao,看了半天,这种情况真的害人。
if(pid = fork()<0)
改成:
if((pid = fork())<0)

论坛徽章:
0
3 [报告]
发表于 2006-04-21 21:01 |只看该作者

回复 1楼 jizhifeng2004 的帖子

不好意思!:)但是,运行的结果还是一样的!fork()一个进程后,不是会返回两个值吗?一个父进程和一个子进程,那为何第二个printf()会显示两次???关键是显示的结果pid=0!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-04-21 21:31 |只看该作者
我执行的结果完全正确。
不明白你的怎么回事。
你把程序改了吗?
知道错在哪里了吗?

论坛徽章:
0
5 [报告]
发表于 2006-04-22 01:35 |只看该作者
原帖由 lenovo 于 2006-4-21 20:53 发表
kao,看了半天,这种情况真的害人。
if(pid = fork()<0)
改成:
if((pid = fork())<0)


以前我徒弟写这个也老是写错。

论坛徽章:
0
6 [报告]
发表于 2006-04-22 09:26 |只看该作者

回复 1楼 jizhifeng2004 的帖子

源程序如下:

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

main()
{
        char buf[1024];
        pid_t pid;
        int status;
        int i=1,ret;
        memset(buf,0,sizeof(buf));

        printf("%%");
        while( fgets(buf,1024,stdin) != NULL )
        {
                buf[strlen(buf)-1]=0;

                printf("i=[%d],buf=[%s]\n",i,buf);

                if( pid = fork() < 0 )
                        printf("error...");
                else if( pid == 0 )
                {
                        printf("aaa pid=[%d]\n",pid);
                        execlp( buf, buf, (char *)0 ) ;
                        printf("OK!!!...ret=[%d]\n",buf,ret);
                }
                else if( pid > 0 )
                {
                        printf("bbb pid=[%d]\n",pid);
                }
                printf("ccc pid=[%d]",pid);

                printf("%%");
                i++;
        }
        exit(0);
}

运行结果如下:
%date
i=[1],buf=[date]                                          ......(1)
aaa pid=[0]                                                 ......(2)
aaa pid=[0]                                                 ......(3)
Sat Apr 22 09:23:21 BEIJING 2006             ......(4)
Sat Apr 22 09:23:21 BEIJING 2006             ......(5)

为什么(2)和(3) , 以及(4)和(5)???就是这个打印两行的问题!!不明白!谢谢指教!
pcanywhere 该用户已被删除
7 [报告]
发表于 2006-04-22 11:22 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2006-04-22 11:36 |只看该作者
理解万岁,呵呵

论坛徽章:
0
9 [报告]
发表于 2006-04-22 11:52 |只看该作者
原帖由 lenovo 于 2006-4-21 20:53 发表
kao,看了半天,这种情况真的害人。
if(pid = fork()<0)
改成:
if((pid = fork())<0)


不知道为什么,我在看到main之前就看见这个了,呵呵

论坛徽章:
0
10 [报告]
发表于 2006-04-22 16:31 |只看该作者

回复 1楼 jizhifeng2004 的帖子

谢谢!后来我在我机器上试成功了!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP