linux - 如何在 OSX 或 LINUX 上执行没有完整目录的 execv()?

标签 linux macos bash shell terminal

在 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/

相关文章:

linux - UNIX 从变量中删除字符

linux - 使用 Linux Mint 时 Flutter 意外退出并出现错误

java - 在 OSX 上安装 HermesJMS 的问题

Linux bash从文件中读取然后将用户添加到linux

bash - 从多个 zip 中解压特定类型的文件

linux - 在 bash 中将条目添加到数组

c++ - Linux 3.0 : futex-lock deadlock bug?

linux - 如何同步两个进程访问相同的资源?

cocoa - Cocoa 应用程序中的性能调优

php - 如何在 Mac 上安装多个 xampp?