gpt4 book ai didi

c - execve - 没有这样的文件或目录?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:07 26 4
gpt4 key购买 nike

我在使用 execve 时遇到了一些问题。我正在尝试制作一个可以像 bash shell 一样运行的 shell,但是我在执行命令的 fork 子项上遇到了问题。这是我为 child 准备的。 cmd 是一个 char * 用户输入的命令。但是,当我运行这个程序时,我从 perror 得到这个错误:

execve error: No such file or directory.

我已经用一个简单的 ls 尝试了这个程序,它应该使 path="/bin/ls"并执行它(我已经确认这是我的 ls 命令所在的位置)但它仍然提示。我究竟做错了什么?谢谢!

if(pid == 0)
{
// Parse the command
char * word = strtok(cmd, " ");
char path[128] = "/bin/";
strcat(path, word);

// Execute the process
char * newenvp[] = { NULL };
char * newargv[] = { path, NULL };
ret = execve(path, newargv, newenvp);

if(ret == -1)
perror("execve error");

return EXIT_SUCCESS;
}

最佳答案

我要做的第一是插入:

printf ("[%s]\n", path);

在调用 execve 之前。这应该确认可执行文件是您认为的那样。

您的代码看起来没问题,只要您输入的输入是正确的,并且可执行文件确实可用。例如,以下完整程序在我的 Debian 机器上运行良好:

#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main (int argc, char *argv[]) {
if (argc > 1) {
char * word = strtok (argv[1], " ");
char path[128] = "/bin/";
strcat (path, word);

char * newenvp[] = { NULL };
char * newargv[] = { path, NULL };
printf ("[%s]\n", path);
int ret = execve (path, newargv, newenvp);
if (ret == -1) {
perror("execve error");
}
}
return 0;
}

当我运行 ./testprog ls 时,输出如下:

[/bin/ls]
kidsshares.ods paxwords birthdays homeloantracking.gnumeric
shares2011.ods backup0.sh development lexar
accounts.ods backup1.sh photos testprog.c
testprog

关于c - execve - 没有这样的文件或目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10158782/

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