Possible Duplicate:
Get path of executable
我在 Windows 上使用 MinGW、gcc 4.4.3 进行编程。当我像这样使用主要功能时:
int main(int argc, char* argv[]){
cout << "path is " << argv[0] << endl;
}
在 Windows 上,我得到这样的完整路径:“C:/dev/stuff/bin/Test”。然而,当我在 Linux 上运行相同的应用程序时,我得到了某种相对路径:“bin/Test”。它破坏了我的应用程序!关于如何确保两个系统上的路径都是绝对路径的任何想法?
不,没有。在 Linux 上的大多数 shell 下,argv[0]
包含用户键入 以运行二进制文件的确切内容。这允许二进制文件根据用户类型执行不同的操作。
例如,具有多个不同命令行命令的程序可能会安装一次二进制文件,然后硬链接(hard link)各种不同的命令到同一个二进制文件。例如,在我的系统上:
$ ls -l /usr/bin/git*
-rwxr-xr-x 109 root wheel 2500640 16 May 18:44 /usr/bin/git
-rwxr-xr-x 2 root wheel 121453 16 May 18:43 /usr/bin/git-cvsserver
-rwxr-xr-x 109 root wheel 2500640 16 May 18:44 /usr/bin/git-receive-pack
-rwxr-xr-x 2 root wheel 1021264 16 May 18:44 /usr/bin/git-shell
-rwxr-xr-x 109 root wheel 2500640 16 May 18:44 /usr/bin/git-upload-archive
-rwxr-xr-x 2 root wheel 1042560 16 May 18:44 /usr/bin/git-upload-pack
-rwxr-xr-x 1 root wheel 323897 16 May 18:43 /usr/bin/gitk
请注意其中一些文件的大小完全相同。更多调查显示:
$ stat /usr/bin/git
234881026 459240 -rwxr-xr-x 109 root wheel 0 2500640 "Oct 29 08:51:50 2011" "May 16 18:44:05 2011" "Jul 26 20:28:29 2011" "May 16 18:44:05 2011" 4096 4888 0 /usr/bin/git
$ stat /usr/bin/git-receive-pack
234881026 459240 -rwxr-xr-x 109 root wheel 0 2500640 "Oct 29 08:51:50 2011" "May 16 18:44:05 2011" "Jul 26 20:28:29 2011" "May 16 18:44:05 2011" 4096 4888 0 /usr/bin/git-receive-pack
inode 号 (459240) 相同,因此这是指向磁盘上同一文件的两个链接。运行时,二进制文件使用 argv[0]
的内容来确定要执行的函数。你可以在 code for Git's main()
中看到这个(某种程度上) .