| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2002 人关注过本帖
标题:C用execlp实现的linux命令解释器问题
取消只看楼主 加入收藏
evilloop
Rank: 2
等 级:论坛游民
帖 子:36
专家分:22
注 册:2011-8-27
结帖率:71.43%
收藏
已结贴  问题点数:30 回复次数:1 
C用execlp实现的linux命令解释器问题
程序代码:
下边是一个unix高级环境编程中的一个实例,可以用来模拟shell,可是自己编译执行起来发现有两个问题:
1.示例中命令提示符是%,本意是执行完一条命令再出来一个提示符,一直循环,直到手动输入终止程序,但每次都是执行完一条就退出了。
2.命令执行完出来两遍结果,情形如下:
    [root@localhost c]# ./a.out
    % ls
    a.out  data  ls_c.c  myexec.c  no_cache_io.c  no_cache_io_v2.c
    a.out  data  ls_c.c  myexec.c  no_cache_io.c  no_cache_io_v2.c
    [root@localhost c]# pwd

附示例中的ourhdr.h头文件:[local]2[/local],求解惑。
/**********************************************/
#include <sys/types.h>
#include <sys/wait.h>
#include "ourhdr.h"

int
main(void)
{
    char    buf[MAXLINE];
    pid_t    pid;
    int        status;

    printf("%% ");
    while (fgets(buf, MAXLINE, stdin) != NULL)
    {
        buf[strlen(buf)-1] = 0;        /*替换换行符为null*/
        if (pid = fork() < 0)        /*fork一个进程*/
        {
            err_sys("fork error");
        }
        else if (pid == 0)
        {
            execlp(buf, buf, (char *) 0);
            err_ret("couldn't execute: %s", buf);
            exit(127);
        }

        if ((pid = waitpid(pid, &status, 0)) < 0)
        {
            err_sys("waitpid error");
        }
        printf("%% ");
    }
    exit(0);
}




ourhdr.zip (2.41 KB)
搜索更多相关主题的帖子: 解释器 
2012-11-23 14:14
evilloop
Rank: 2
等 级:论坛游民
帖 子:36
专家分:22
注 册:2011-8-27
收藏
得分:0 
回复 2楼 jk_love
非常感谢。我只是把你给的第一个逻辑,就是pid=fork()从while中抽出来,pid<0后边没加continue,也正常了,很奇怪,执行两次的问题明白了,但为什么之前执行后会退出呢,即使执行两次
2012-11-23 15:11
快速回复:C用execlp实现的linux命令解释器问题
数据加载中...
 
   



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

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