gpt4 book ai didi

在 C 中使用 execve 调用 mkdir 系统调用

转载 作者:行者123 更新时间:2023-12-01 10:59:19 25 4
gpt4 key购买 nike

我是 C 语言的新手,正在学习操作系统类(class),我需要用 C 语言编写一个基本的 shell(是的)。它实际上已经过半了,我只是想在完成工作的同时学习 C 基础知识。

我正在尝试在 fork 之后使用 exec 并暂时调用 mkdir。这些论点需要我稍微考虑一下,但我一直在努力弄清楚,希望有人能告诉我我哪里出错了。

            } else {
//fork exec
int pid = fork();
if (pid == 0) {
printf("%s",my_argv[0]);
execve("/bin/mkdir",my_argv,0);
} else wait(NULL);
}

这是我响应 mkdir 调用的部分。现在,我有一个从用户输入的行 [],命令是用

command = strtok(line, DELIMITERS);

参数是:

arg = strtok(0,DELIMITERS);
my_argv[0] = arg;

一切都可以正常编译,但 mkdir 无法正常工作。打印 my_argv[0] 给出了我期望的正确参数。我敢肯定这是愚蠢的事情,但任何提示将不胜感激。

所有代码:

int main(int argc, char *argv[])
{
char *command;
char line[MAXLINE];
char *arg = NULL;
char *my_argv[];


while(1) {
printf(PROMPT);
if (fgets(line,MAXLINE,stdin) != NULL) {
//take out \n
line[strlen(line)-1] = '\0';
}
//looks for first delimiter, saves as the command
command = strtok(line, DELIMITERS);


//start looking at what command it is by comparing
if (strcmp(command,"cd")==0) {
//if they equal zero, they match
//this is a cd command, must have following arg
if (argv[1] == NULL) chdir("/");
else chdir(argv[1]);//chdir is the system call for cd
} else if (strcmp(command,"exit")==0) {
break;
} else if (strcmp(command,"mkdir")==0){
arg = strtok(0,DELIMITERS);
my_argv[0] = arg;
my_argv[1] = NULL;
if (!arg) {
printf("Usage: mkdir missing arg\n");
} else {
//fork exec
int pid = fork();
if (pid == 0) {
printf("%s",my_argv[0]);
//mkdir(arg);
execve("/bin/mkdir",my_argv,0);
} else wait(NULL);
}
}


}
return 0;
}

最佳答案

  • argv[0] 包含程序的名称
  • argv[1] 是第一个参数
  • 参数列表必须以 NULL 结尾

关于在 C 中使用 execve 调用 mkdir 系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12700586/

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