[linux下获取程序当前目录绝对路径](http://blog.chinaunix.net/uid-14214482-id-4299670.html)
分类:LINUX
2014-06-11 18:13:54
1\. Shell 版本 #获取当前脚本所在绝对路径 cur\_dir=$(cd "$(dirname "$0")"; pwd)
2\. C语言版本
> 方法一、用realpath函数。这种方法用于开机启动程序获取自身目录会出错
> char current\_absolute\_path\[MAX\_SIZE\];
> //获取当前目录绝对路径
> if (NULL == realpath("./", current\_absolute\_path))
> {
> printf("\*\*\*Error\*\*\*\\n");
> exit(-1);
> }
> strcat(current\_absolute\_path, "/");
> printf("current absolute path:%s\\n", current\_absolute\_path);
> 方法二、用getcwd函数。这种方法用于开机启动程序获取自身目录会出错
> char current\_absolute\_path\[MAX\_SIZE\];
> //获取当前目录绝对路径
> if (NULL == getcwd(current\_absolute\_path, MAX\_SIZE))
> {
> printf("\*\*\*Error\*\*\*\\n");
> exit(-1);
> }
> printf("current absolute path:%s\\n", current\_absolute\_path);
> 方法三、用readlink函数。这种方法**最可靠**,可用于开机启动程序获取自身目录
> char current\_absolute\_path\[MAX\_SIZE\];
> //获取当前程序绝对路径
> int cnt = readlink("/proc/self/exe", current\_absolute\_path, MAX\_SIZE);
> if (cnt = MAX\_SIZE)
> {
> printf("\*\*\*Error\*\*\*\\n");
> exit(-1);
> }
> //获取当前目录绝对路径,即去掉程序名
> int i;
> for (i = cnt; i >=0; --i)
> {
> if (current\_absolute\_path\[i\] == '/')
> {
> current\_absolute\_path\[i+1\] = '\\0';
> break;
> }
> }
> printf("current absolute path:%s\\n", current\_absolute\_path);