2009-09-09 74 views
2

说我有一个命令行C程序当前正在执行,并且我想要读取一个文件或在同一个目录中执行另一个二进制文件 - 我如何才能找出哪个目录是?当前正在运行的C程序如何找出它所在的目录?

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

  • ../../program
  • /家庭/亚光/程序
  • PATH = $ PATH:/家庭/亚光程序

理想情况下我在找东西,将通过MinGW在unix系统和windows上工作。

+3

完成参阅http:// stackoverflow.com/questions/1023306/finding-current-executables-path-without-proc-self-exe – mark4o 2009-09-09 05:51:49

回答

2
+0

强制要求CWD包含帮助程序可执行文件对于我认识的用户(包括我)来说肯定是不能接受的。 – AProgrammer 2009-09-09 07:05:10

+0

不知道你在AProgrammer上得到什么...我没有提供关于助手可执行文件的任何信息。如果程序需要以cwd作为程序驻留的地方开始,那么它完全有效地检查cwd中存在的argv [0]的基名。正如mark40指出的那样,从http://stackoverflow.com/questions/1023306/finding-current-executables-path-without-proc-self-exe有更好的建议。重点是 - 无法可靠地找到正在执行的程序的位置,因此它应该作为要求被移除,或者他可以尽力检测。 – 2009-09-09 08:59:50

+0

编辑链接到具有系统特定工作的其他线程 – 2009-09-09 09:05:34

1

的毗连GETCWD()和目录名(argv的[0])

+0

这将工作在第一和第二个案件,但不是在第三,除非我错了。 – 2009-09-09 05:51:32

+0

是的,这在第三种情况下不起作用。实际上argv [0]可以通过执行程序来设置任何东西,因此它不会对其进行中继。一个很好的答案是在@ mark4o提供的链接中对您的问题发表评论。 – dimba 2009-09-09 06:01:00