| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 505 人关注过本帖
标题:一个unix的简单程序,有个问题不能理解望赐教
只看楼主 加入收藏
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
结帖率:88.89%
收藏
已结贴  问题点数:10 回复次数:6 
一个unix的简单程序,有个问题不能理解望赐教
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/wait.h>
#define MAXLINE 4096
int main(void){
    pid_t pid;
    char buf[MAXLINE];
    int status;
    printf("%%");
    while(fgets(buf,MAXLINE,stdin) != NULL)
    {
        if(buf[strlen(buf) - 1] == '\n')
            buf[strlen(buf)-1] = 0;
        if((pid = fork()) < 0){         //创建子进程
            //err_sys("fork error");
            printf("fork error \n");
        }else if(pid == 0){
            //执行命令
            execlp(buf,buf,(char *) 0);          //就是这里,函数execlp执行成功,就不再执行后面的部分,如果失败则执行后面的部分。
                                                 //为什么函数执行成功则不执行后面的语句?这里没有控制的语句吧!
                                                  //难道是execlp函数里面设置有?还是C语言的一种语法

            //err_ret("couldn't execute: %s \n'",buf);
            printf("couldn't execut: %s \n",buf);
            exit(127);
        }
        //父进程
        //printf("开始终止进程 Process ID: %s\n",getpid());
        if((pid = waitpid(pid,&status,0)) < 0){
            //err_sys("waitpid error");
            printf("waitpid error \n");
        }
        printf("%%");
    }
    exit(0);

}
搜索更多相关主题的帖子: include status 
2013-07-17 19:21
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
还不如先去百度搜索一下execlp函数的用法

思考赐予新生,时间在于定义
2013-07-17 19:23
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 2楼 love云彩
..............没那么简单
2013-07-17 20:18
心灯甚亮
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:441
专家分:996
注 册:2013-1-29
收藏
得分:0 
不懂
2013-07-17 21:07
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:5 
exec函数在执行时会代替掉原进程的代码段,数据段等,所以如果它执行成功之后就不会执行了,因此一般fork一个子进程使用这个函数
2013-07-17 21:33
qq525273446
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:54
专家分:161
注 册:2009-11-18
收藏
得分:5 
以下是引用czz5242199在2013-7-17 21:33:54的发言:

exec函数在执行时会代替掉原进程的代码段,数据段等,所以如果它执行成功之后就不会执行了,因此一般fork一个子进程使用这个函数
一般   vfork   一个子进程使用这个函数

找工作中……
2013-07-17 21:49
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
回复 5楼 czz5242199
有道理哦,明天查查看
2013-07-18 00:01
快速回复:一个unix的简单程序,有个问题不能理解望赐教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011882 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved