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

时间:2015-10-17 01:06:21

标签: linux macos bash shell terminal

在C shell编程中,我了解到我可以使用诸如execv("/bin/ls",argv)之类的函数来执行termial函数"ls"。但是,execv()需要函数的完整路径。

我写了我的C文件,在C文件中我正在访问shell,但我仍然使用终端来编译它并传入参数。

我想模拟termimal“ls”,此时我可以使用execv("/bin/ls",argv)来执行此操作,这意味着我必须输入“/ bin / ls”作为将传递给可执行文件的参数。

现在,我宁愿只输入“ls”来完成任务(基本上保存路径输入)而不使用路径名,我应该怎么做?

在OXS上,默认路径是 / usr / bin:/ bin:/ usr / sbin:/ sbin:/ usr / local / bin

我试着放execv(PATH,argv)但是当我输入ls

时它什么都没有

感谢你

1 个答案:

答案 0 :(得分:0)

将getenv(" PATH")返回的每个路径与可执行文件名连接起来。

例如将PATH解析为char * ary [],然后首先在ary,strcat(ary [i]," /")和strcat(ary [i],"可执行文件)中的每个路径名称&#34)。在这种情况下,execv将搜索该绝对路径以查看该文件是否存在。

顺便说一下,就性能而言,建议在将文件名传递给更昂贵的exec(3)调用之前先使用stat(2)进行检查。