gpt4 book ai didi

c - execvp 函数无需路径即可工作

转载 作者:行者123 更新时间:2023-11-30 16:00:28 28 4
gpt4 key购买 nike

我正在用 C 编程编写一个正在运行的 shell 脚本。我读过有关 exec 函数的内容,虽然不太了解,但我读过一个像这样使用 execvp 的示例

execvp(*argv, argv) ;

/* here argv is a char pointer array containing commands like ls -l

argv[0]-> ls argv[1]-> -l

*/

但它的使用没有给出文件名作为参数,我不明白它是如何工作的。任何人都可以解释这一点,如 execvp 的描述所示,它被赋予指定的文件名非常感谢

最佳答案

在你实际通过的情况下参数1:lsArg2:ls -l确保您的参数不为 NULL 后,此检查完成

/* If it's an absolute or relative path name, it's easy. */
if (strchr(argv[0], '/')){
execve(argv[0],argv,environ);
}
//In your case this would fail because argv[0] is not an absolute path.
//So now the search for argv[0] begins in the PATH
path = getenv("PATH")
//Now for each directory specified in path, it will attempt an execve call as
//For simplicity, I am calling each directoryname in PATH to be dir
execve(strcat(dir,argv[0]),argv,environ)
//If this generates an error called [ENOEXEC][1], then it's okay to continue searching in other directories, else quit searching and return the errorcode

我提供了 execvp 工作的简化和抽象 View 。您必须查看源代码才能更好地了解内部工作原理

关于c - execvp 函数无需路径即可工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7735533/

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