gpt4 book ai didi

c - 我正在创建我自己的 UNIX shell,有时当我运行 'ls' 命令时它会给出一个错误地址错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:58:20 24 4
gpt4 key购买 nike

我想知道 execvp 调用 ls 是否有错误导致它偶尔失败然后在其他时候正常工作。

void lookInsideCurrentDirectory(char **parsed){
char* line = NULL;
pid_t pid = fork();

if(pid == -1){
return;
}
else if(pid == 0){
if(execvp(parsed[0], parsed) == -1){
perror("Error: ");
}
exit(0);
}
else{
wait(NULL);
return;
}
}

最佳答案

根据 https://www.gnu.org/software/libc/manual/html_node/Error-Codes.html :

Macro: int EFAULT

“Bad address.” An invalid pointer was detected.

如果您从 execvp 收到此错误,则意味着 parsed 中的某些指针无效。您应该查看程序的其余部分,并确保在 execvp 调用完成之前,parsed 数组中的任何字符串都没有被 free()-ed。

另一个非常常见的错误是,由于您没有将参数数组的长度传递给 execvp,因此 argv 参数必须是一个以 NULL 结尾的数组,以便 execvp 知道何时停止读取争论。这意味着如果您收到如下命令:ls -lah/bin 那么您的argv 数组应该大一号并以 NULL 指针结尾:

char** argv = {"ls", "-lah", "/bin", NULL};

如果您不以 NULL 指针结束 argv,execvp 将尝试取消引用内存中接下来的任何内容作为指针地址,除非它恰好包含 NULL 字节,否则取消引用可能会失败或可能会取消引用意想不到的事情。

关于c - 我正在创建我自己的 UNIX shell,有时当我运行 'ls' 命令时它会给出一个错误地址错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50843093/

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