首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C语言实现Linux

问用C语言实现Linux
EN

Stack Overflow用户
提问于 2016-08-20 02:30:32
回答 1查看 358关注 0票数 1

我正在练习制造一个外壳,但我正在为一个问题而挣扎。除了"cd“之外,几乎所有命令都工作得很好。我搞不懂为什么会发生这种事。

这是我的代码:

代码语言:javascript
复制
int main(int argk, char *argv[], char *envp[])
{
    int             frkRtnVal;  
    char           *v[NV];  
    char           *sep = " \t\n";
    int             i;      

    while (1)
    {
        fgets(line, NL, stdin);
        fflush(stdin);

        if (feof(stdin))
        {
            fprintf(stderr, "EOF pid %d feof %d ferror %d\n", getpid(), feof(stdin), ferror(stdin));
            exit(0);
        }

        if (line[0] == '#' || line[0] == '\n' || line[0] == '\000')
        {
            continue;
        }

        v[0] = strtok(line, sep);
        for (i = 1; i < NV; i++)
        {
            v[i] = strtok(NULL, sep);
            if (v[i] == NULL)
            {
                break;
            }
        }

        frkRtnVal = fork();
        switch (frkRtnVal)
        {
            case -1:
            {
                break;
            }
            case 0: 
            {
                execvp(v[0], v);
            }
            default:            
            {
                wait(0);
                break;
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-20 02:33:20

在子进程中更改工作目录似乎不会影响父进程,因此它的效果不会停留在shell中。您必须在shell中解析它,并将其作为一个特殊命令来处理。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39049898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档