gpt4 book ai didi

cd 命令不适用于 execvp

转载 作者:太空狗 更新时间:2023-10-29 11:24:45 25 4
gpt4 key购买 nike

#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 命令。我该如何修复它?我对操作系统的概念还很陌生,如有任何帮助,我们将不胜感激! :)

最佳答案

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

如果您计划实现其他命令,您还需要将其作为内置命令实现,包括(例如,我不想说得太透彻):

  • pushdpopd
  • exitlogoutbye
  • fgbgjobs& 后缀
  • 历史
  • 设置取消设置, 导出

关于cd 命令不适用于 execvp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18686114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com