C、运行时测试 PATH 中是否存在可执行文件

标签 c path runtime

我目前正在用 C 语言编写一个应用程序,目标是 BSD 和 Linux 系统,希望能够普遍移植。该程序是一个运行时依赖项,在本例中是 mplayer。

就目前情况而言,我正在使用execlp()来启动mplayer。我正在检查 execlp 调用的错误代码,并且正在测试 EACCESS,因此我知道何时尝试运行 mplayer 是否存在。

由于我的程序的工作方式,mplayer 是必需的依赖项,但在我的程序启动后的一段时间内可能无法使用。作为用户体验,程序在由于 mplayer 丢失而失败之前已经运行了一段时间,这是很糟糕的。所以我想在程序启动时测试 mplayer 是否存在。如果 mplayer 不可用,可能会发出错误消息。

现在我知道这里存在竞争条件,因此我当前对 EACCESS 错误的处理必须保留。我们可能会发现这样一种情况:用户启动我的程序运行,然后卸载 mplayer。这是接受的。

我最初的想法是在执行早期调用 execlp(),但这会导致 mplayer 明显启动。老实说,我不想启动 mplayer,只是测试我是否“可以”启动它(例如,我的路径中某处是否存在名为 mplayer 的文件,并且它是否可执行)。

第二个想法是运行这些精确的步骤,查看路径并测试匹配的文件是否可执行。我还没有对此进行编码有两个原因。第一个原因是,为了确保 execlp 找到与我发现的相同的东西,我必须将发现的路径名传递给 execlp,绕过内置的 PATH 搜索机制。另一个原因只是我觉得我错过了一个明显的技巧。

我应该使用一个函数来搜索可执行文件吗?或者我真的需要继续编写代码吗?

最佳答案

某些系统(FreeBSD、Linux)支持 which 命令在用户路径中搜索给定命令。

我认为这在某种意义上回避了这个问题......如果您的代码可能在各种系统上运行,您可能会觉得需要执行 which which 只是为了确定 which 可用。 ;-) 如果这是一个问题,您可能仍然需要考虑将该功能构建到您的程序中,但代码仍然可能是一个有用的起点。

关于C、运行时测试 PATH 中是否存在可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8035372/

相关文章:

c - 在 Aleph One 文章上工作时在 64 位系统上缺少堆栈分配

c - 动态分配int数组

比较相同的单词

c++ - 当目标路径文件以点 ('.' 开头时,来自 boost::log 的未处理异常)

c++ - 带 static_assert() 的逗号运算符

c++ - 如何根据鼠标位置旋转 Sprite ?

PHP 站点在 linux 上运行但不能在 windows 上运行

java |保存文件路径

算法运行时

java - 是否可以在运行时获取类型参数?