在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
感谢你
答案 0 :(得分:0)
将getenv(" PATH")返回的每个路径与可执行文件名连接起来。
例如将PATH解析为char * ary [],然后首先在ary,strcat(ary [i]," /")和strcat(ary [i],"可执行文件)中的每个路径名称&#34)。在这种情况下,execv将搜索该绝对路径以查看该文件是否存在。
顺便说一下,就性能而言,建议在将文件名传递给更昂贵的exec(3)调用之前先使用stat(2)进行检查。