【问题标题】:How can a currently running C program find out what directory it is located in?当前正在运行的 C 程序如何找出它所在的目录?
【发布时间】:2009-09-09 05:37:57
【问题描述】:

假设我有一个当前正在执行的命令行 C 程序,我想读取一个文件或在同一目录中执行另一个二进制文件 - 我怎样才能找到那个目录?

请注意,我不是在寻找当前的工作目录。用户可能通过以下任何方式调用了我的原始程序(可能还有其他我不知道的方式)。

  • ../../program
  • /home/matt/程序
  • PATH=$PATH:/home/matt 程序

理想情况下,我正在寻找可以通过 MinGW 在 unix 系统和 windows 上运行的东西。

【问题讨论】:

标签: c unix mingw


【解决方案1】:

【讨论】:

  • 强制 CWD 包含辅助可执行文件对于我认识的用户(包括我)肯定是不可接受的。
  • 不确定你在 AProgrammer 得到了什么...我没有建议任何关于辅助可执行文件的内容。如果程序需要以 cwd 作为程序所在的位置开始,那么检查 cwd 中存在的 argv[0] 的基本名称是完全有效的。正如 mark40 所指出的,stackoverflow.com/questions/1023306/… 提供了更好的建议。关键是 - 不可能可靠地找到正在执行的程序位置,因此应该将其作为要求删除,或者他可以尽最大努力检测。
  • 编辑链接到具有系统特定解决方法的其他线程
【解决方案2】:

连接 getcwd() 和 dirname(argv[0])

【讨论】:

  • 这适用于第一种和第二种情况,但不适用于第三种情况,除非我弄错了。
  • 是的,这在第三种情况下不起作用。实际上 argv[0] 可以通过执行程序设置为任何东西,因此它不是中继它。 @mark4o 在评论您的问题时提供的链接中提供了一个很好的答案。
猜你喜欢
  • 2012-08-28
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 2020-06-25
  • 2013-03-15
  • 1970-01-01
  • 2019-09-23
  • 2020-07-02
相关资源
最近更新 更多