【问题标题】:C, open files relative to executable's path?C、相对于可执行文件的路径打开文件?
【发布时间】:2012-02-26 15:39:13
【问题描述】:

我想修复一个使用相对路径加载数据文件的旧C程序(获取源代码),期望从放置它的目录调用可执行文件,例如LoadEx("./dataFile", dataFile);当然从另一个调用程序目录失败,因为无法加载 dataFile

如何修改 C 程序以相对于可执行文件的目录加载 dataFiles

编辑: 我最初的问题变得不适用,因此至少重复: - How do I find the location of the executable in C? - How to open a file with it's relative path in Linux? - Finding current executable's path without /proc/self/exe

【问题讨论】:

  • 您列出的 Java 方法不会读取相对于正在执行的 Java 类的资源,而是相对于其类路径。
  • 你说得对。我误解了 Java 中的 ClassLoader 是如何工作的。既然如此,我原来的问题就变得不适用了......然后我想除了用proc找到绝对路径或通过配置设置绝对路径之外别无他法,在这种情况下,我的问题与另一个问题重复了跨度>
  • C 代码中 main 函数的 argv[0] 参数应该有完整的文件名和可执行文件的路径。假设你有一个 main 函数并且没有擦除你的参数。

标签: java c linux path getresource


【解决方案1】:

你为什么不想要readlink("/proc/self/exe")?这是在 linux 上找到可执行文件路径的方式。

唯一的另一种方法是使用getenv() 从环境中拉出 PATH,然后遍历 PATH 目录寻找 argv[0] 的匹配项。第一个选项更容易。

或者在第一次对可执行文件执行which 并将结果作为命令行参数或类似的hack 传递之后,编写一个脚本来启动程序。

【讨论】:

  • 谢谢鸭子。我想我发现不得不依赖特定操作系统的如此多细节而不是能够使用更标准的解决方案是非常难看的。如果我想在更多操作系统上运行它,我将不得不检查procargv[0]$PATHGetModuleFileName,如stackoverflow.com/questions/933850/… 但可能这就是它的完成方式?
  • 文件系统依赖于操作系统。并不是所有的操作系​​统都有文件系统!
  • 你能做什么,这是一个不完美的世界。如果它更容易接受,这可能也是 Java 在幕后所做的事情。
  • @ObscureRobot 当然,但是,在我看来,一种语言可以很容易地为标准操作系统提供一个库
  • C 语言是为实现操作系统而设计的,因此“标准”操作系统的想法本身就是荒谬的。 Kernighan 和 Ritchie 从未预料到 Unix 会像现在这样流行(Linus 开始使用 Linux 时也没有)。
猜你喜欢
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 2014-04-04
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多