gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:34:10 27 4
gpt4 key购买 nike

我目前正在用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com