当前位置: 首页 > 面试题库 >

如何在C中找到可执行文件的位置?

盖锐进
2023-03-14
问题内容

C / C ++中是否可以找到当前已执行程序的位置(完整路径)?

(问题argv[0]在于它没有给出完整的路径。)


问题答案:

总结一下:

  • 在Unix上,/proc真正可行的方法是:

    • readlink("/proc/self/exe", buf, bufsize) (Linux)

    • readlink("/proc/curproc/file", buf, bufsize) (FreeBSD)

    • readlink("/proc/self/path/a.out", buf, bufsize) (Solaris)

  • 在没有Unix的Unix上/proc(即,如果以上失败):

    • 如果argv [0]以“ /”(绝对路径)开头,则为路径。

    • 否则,如果argv [0]包含“ /”(相对路径),则将其附加到cwd(假设尚未更改)。

    • 否则,在目录中搜索$PATH可执行文件argv[0]

之后,检查可执行文件是否实际上不是符号链接可能是合理的。如果解决,则相对于symlink目录。

/ proc方法中不需要此步骤(至少对于Linux)。proc符号链接在那里直接指向可执行文件。

请注意,取决于调用过程的argv[0]正确设置。在大多数情况下是正确的,但是有时调用进程不能被信任(例如setuid可执行文件)。

  • 在Windows上:使用 GetModuleFileName(NULL, buf, bufsize)


 类似资料:
  • 问题内容: 我需要使用二进制路径设置环境。在外壳中,我可以使用它来查找路径。python中是否有等效项?这是我的代码。 问题答案: 有。

  • 我有一个docker映像,它安装了,但是当我试图运行它时,我得到了一个错误: 如果我在交互模式下运行bash,则可用。 我做错了什么? 这是我的Dockerfile:

  • 我在安装Psycopg2时遇到了麻烦。尝试时出现以下错误: 但问题是实际上在我的中;它运行起来没有任何问题: 我对这些错误感到困惑。有人能帮忙吗? 顺便说一下,我所有命令。我也在RHEL 5.5上。

  • 问题内容: 我了解到,使用exec()调用发出的命令的可执行文件应该存储在PATH变量一部分中的目录中。 因此,我在/ bin中找到的可执行文件。 但是,我找不到的可执行文件。 它在哪里? 问题答案: 进程只能影响其自己的工作目录。当可执行文件由外壳执行时,它将作为子进程执行,因此cd可执行文件(如果存在)将在不影响父进程(外壳)的情况下更改该子进程的工作目录,因此cd命令必须实现为内置的shel

  • 我有一个运行在Docker容器中的uwsgi服务,我想用它来服务django应用程序。当我在本地运行uwsgi服务时,一切正常,但是从docker容器中我得到消息和,django应用程序显示内部服务器错误。这是我的uwsgi.ini文件。在docker容器中,我使用类似于

  • 问题内容: 我在安装psycopg2时遇到问题。我尝试执行以下操作时收到以下错误pip install psycopg2: 但是问题出在我身上PATH; 它运行没有任何问题: 我尝试将径添加到文件中,并使用从其网站(http://initd.org/psycopg/)下载的源文件进行构建,然后收到以下错误消息! 但实际上是那里!!! 这些错误使我感到困惑。有人可以帮忙吗? 顺便说一下,我sudo所