允许使用execvp执行程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了允许使用execvp执行程序相关的知识,希望对你有一定的参考价值。

我正在创建一个shell副本,我有一个问题,可执行自制程序。我的意思是,当我想执行诸如javalswc等等的事情时,一切都还可以。所有已经存在于PATH变量中的东西。

现在我想能够执行一个“myls”命令,它是原始ls的副本。问题是我的程序没有在PATH变量中注册,所以当我尝试execvp("myls", …)时,我收到错误“没有这样的文件或目录”。

我想知道如何管理此问题并能够根据此层次结构执行我的命令:

src
include
bin
makefile
executable <- this one is my main executable
myLs
    executableLS <- would like to be able to call this one through execvp
myPs
    executablePS <- would like to be able to call this one through execvp
答案

要允许使用execvp()执行程序,您必须:

  • 将您的程序放在$PATH上的目录中,
  • 或者将程序所在的目录放在$PATH上,
  • 或安排使用程序的绝对路径名(/some/where/useful/myLs),
  • 或安排使用正确的程序相对路径名(../useful/myLs甚至./myLs)。

请注意,execvp()仅在$PATH上搜索它看到的命令名称时不包含/(因此./myLs会阻止它在$PATH上查找)。相对名称通常最不实用;如果更改目录,则相对路径名可能会更改。

如有疑问,请确保您有一个目录$HOME/bin,将您的程序放在那里(或符号链接到那里的程序),并将$HOME/bin添加到您的路径中。它生活在我的PATH前面;我想我知道自己在做什么。

以上是关于允许使用execvp执行程序的主要内容,如果未能解决你的问题,请参考以下文章

在while循环中使用execvp和fork时的无限循环

如何捕获 execvp 的输出

使用 fork() 和 execvp() 函数创建 C 程序时遇到问题

linux进程---exec族函数(execl, execlp, execle, execv, execvp, execvpe)

编译错误:“g++:尝试执行 'cc1plus' 时出错:execvp:没有这样的文件或目录”

尝试执行“cc1”时出错:execvp:没有这样的文件或目录