cd命令不能与execvp一起使用

时间:2013-09-08 16:40:55

标签: c linux

#include <stdio.h>
#include <sys/types.h>
#include <string.h>

int main()
{
    char *ip;
    char *temp[10];
    pid_t pid;

    pid = fork();

    if (pid == 0) {
        int i = 0;

        do {
            gets(ip);

            temp[0] = strtok(ip, " ");
            while (temp[++i] != NULL) {
                temp[i] = strtok(NULL," ");
            }

            pid_t pid2;

            pid2 = fork();
            if (pid2 == 0) {
                execvp(temp[0], temp);
            }
        } while(strcmp(temp[0], "quit"));

        if (!strcmp(temp[0],"quit")) {
            return;
        }
    } else if (pid < 0) {
        fprintf(stderr,"error in creating child");
    } else if (pid > 0) {
        wait(NULL);
    }
}

这段代码似乎无法使用cd命令。我是否可以修复它?我对操作系统的概念相当新,任何帮助都将不胜感激! :)

1 个答案:

答案 0 :(得分:11)

cd不作为可执行命令存在。 (并且它不能,因为进程只能更改其自身的工作目录,而不能更改其父级。)您需要使用cd系统调用自己实现chdir()作为内置,类似于您已经实施quit的方式。

如果你计划实现它们,你需要实现内置的其他命令,包括(例如,我不是要彻底):

  • pushdpopd
  • exitlogoutbye
  • fgbgjobs&后缀
  • history
  • setunset, export