在C on a*nix系统中,查找二进制文件';带$path或";的绝对路径;哪个;?
我希望得到二进制文件的绝对路径(特别是7zip的7z)。我认为这两种方法都可以做到在C on a*nix系统中,查找二进制文件';带$path或";的绝对路径;哪个;?,c,linux,C,Linux,我希望得到二进制文件的绝对路径(特别是7zip的7z)。我认为这两种方法都可以做到 获取$PATH环境变量,并检查每个目录中是否存在7z,或 “炮击”到该命令并从其标准输出读取 哪种方法是最传统的?第一种方法(使用getenv(“路径”)并扫描它……)更可取、更有效。。。这通常是哪个通常会做的事情(但不要依赖于哪个的行为可能会有很大的变化…),但您不会选择任何流程(并且分叉或系统或哪个可能会失败) 但是,我质疑为什么需要找到某些可执行文件的路径。在执行该程序时,您可以简单地使用(以及类似的exe
getenv(“路径”)
并扫描它……)更可取、更有效。。。这通常是哪个
通常会做的事情(但不要依赖于哪个
的行为可能会有很大的变化…),但您不会选择任何流程(并且分叉
或系统
或哪个
可能会失败)
但是,我质疑为什么需要找到某些可执行文件的路径。在执行该程序时,您可以简单地使用(以及类似的exec*p*
函数,所有函数都执行与getenv(“PATH”)
等效的操作,然后像以前一样在内部扫描它)
(在您可以忽略的非常病态的情况下,getenv(“路径”)
可能会失败)
请注意,在测试二进制文件的存在性(并在路径中找到它)和删除二进制文件之间,二进制文件可能会被删除(或添加,或损坏…)。而且,execve
可能由于多种原因而失败(很少),或者不能像您期望的那样工作(特别是,如果您的7z
可执行文件所依赖的某个共享库已损坏或被删除)
不要忘记,在Linux上,几个进程可以读写(或执行)同一个文件(也可以在读取时删除或重命名)。请阅读更多关于
因此,在execvp
之前找到7z
的完整路径是错误的或不准确的:在路径检查之后和运行之前,其他一些程序可能已经删除或重新安装了7z
。我不明白您为什么要扫描路径
,我认为它通常是无用的,请将其留给execvp
另见
因为Linux发行版上的大多数软件都是,所以您可以(也许您应该)研究它们的源代码。对于,它通常是shell的内置(和bash
,都是免费软件)或来自的程序(可能不是),我不确定大多数发行版是否有它(其中一些默认情况下不会安装)
注:我的感觉是,您的代码不应该使用7z
,这在大多数Linux系统上通常不可用,在我的系统上也不可用;您可能隐含地要求您的用户安装它(至少要记录它)。您可能更喜欢tar
存档而不是zip
存档,注意这是一个POSIX头!请参阅问题并考虑<代码> LBTAR < /COD> < P>第一种方法(使用<代码> GETEnV(“PATH”)< /代码>和扫描它……)是更好的和更有效的…这通常是哪个
通常会做的事情(但不要依赖于哪个
的行为可能会有很大的变化…),但您不会选择任何流程(并且分叉
或系统
或哪个
可能会失败)
但是,我质疑为什么需要找到某些可执行文件的路径。在执行该程序时,您可以简单地使用(以及类似的exec*p*
函数,所有函数都执行与getenv(“PATH”)
等效的操作,然后像以前一样在内部扫描它)
(在您可以忽略的非常病态的情况下,getenv(“路径”)
可能会失败)
请注意,在测试二进制文件的存在性(并在路径中找到它)和删除二进制文件之间,二进制文件可能会被删除(或添加,或损坏…)。而且,execve
可能由于多种原因而失败(很少),或者不能像您期望的那样工作(特别是,如果您的7z
可执行文件所依赖的某个共享库已损坏或被删除)
不要忘记,在Linux上,几个进程可以读写(或执行)同一个文件(也可以在读取时删除或重命名)。请阅读更多关于
因此,在execvp
之前找到7z
的完整路径是错误的或不准确的:在路径检查之后和运行之前,其他一些程序可能已经删除或重新安装了7z
。我不明白您为什么要扫描路径
,我认为它通常是无用的,请将其留给execvp
另见
因为Linux发行版上的大多数软件都是,所以您可以(也许您应该)研究它们的源代码。对于,它通常是shell的内置(和bash
,都是免费软件)或来自的程序(可能不是),我不确定大多数发行版是否有它(其中一些默认情况下不会安装)
注:我的感觉是,您的代码不应该使用7z
,这在大多数Linux系统上通常不可用,在我的系统上也不可用;您可能隐含地要求您的用户安装它(至少要记录它)。您可能更喜欢tar
存档而不是zip
存档,注意这是一个POSIX头!请参阅问题并考虑<代码> LBTART>/代码> ,我倾向于<代码> > <代码>。好了,反正它是*nix中的$PATH
,如果有专门用于此目的的程序,为什么要使用这种自建方法?请解释并激发你为什么需要获得7z
二进制文件的绝对路径;我猜这是错误的(或者非常不寻常,除非您正在编写shell及其程序哈希表),其想法是让用户在配置文件中指定二进制文件的绝对路径,并基于$path提供默认值。但是我想我会根据下面的信息重新考虑这个设计,可能会默认使用execvp(3),除非配置文件