在 C shell 编程中,我了解到我可以使用诸如 execv("/bin/ls",argv)
之类的函数来执行终端函数 "ls"
.但是,execv()
需要函数的完整路径。
我写了我的 C 文件,在 C 文件中我正在访问 shell,但我仍然使用终端来编译它并传递参数。
我想模拟终端“ls”,目前我可以使用execv("/bin/ls",argv)
来做,这意味着我必须输入“/bin/ls"作为将传递给可执行文件的参数。
现在,我宁愿只输入“ls”来完成没有路径名的任务(基本上节省了路径输入),我应该怎么做?
在 OXS 上,默认路径是 /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin,
我尝试输入 execv(PATH,argv)
但是当我输入 ls
时它什么也没给出
谢谢
最佳答案
将 getenv("PATH") 返回的每个路径与可执行文件名称连接起来。
例如,将 PATH 解析为 char* ary[],然后首先将每个路径解析为 ary,strcat(ary[i], "/") 和 strcat(ary[i], "executable name")。在这种情况下,execv 将搜索该绝对路径以查看该文件是否存在。
顺便说一句,就性能而言,建议在将文件名传递给更昂贵的 exec(3) 调用之前先使用 stat(2) 检查。
关于linux - 如何在 OSX 或 LINUX 上执行没有完整目录的 execv()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33181636/