Liunx下获取当前程序路径的方法
来源:互联网 发布:内江市淘宝贝幼儿园 编辑:程序博客网 时间:2024/05/22 15:26
原创文章,转载请注明: 转载自basic coder
转载者:范例代码经过测试。
在linux下运行的程序经常需要获取自己的绝对路径,程序可能需要引用外部的资源文件,比如在../skin/目录下的图片,这样普通程序是没有问题,但当程序在安装到/usr/bin/目录中,或者为程序建立连接以后就会出现问题,我们可以直接通过运行程序的链接来运行程序,这样../skin/目录就找不到了,因为当前目录并不是程序所在的目录,而且链接所在的目录,所以在它的上一级目录中根本找不到skin目录,所以就需要获取程序的绝对路径,用到了一个函数readlink,原型如下:
#include <unistd.h> ssize_t readlink(const char *restrict path , char *restrict buf , size_t bufsize)
该函数的作用是读取符号链接的原路径,将它存到buf中,返回添充到buf中的字节数。
#include <unistd.h>#include <stdio.h> int main(int argc , char* argv[]){char buf[1024] = { 0 };int n; n = readlink("/bin/mail" , buf , sizeof(buf));if( n > 0 && n < sizeof(buf)){printf("%s\n" , buf);}}
程序运行后输出:/usr/bin/mailx (在我的centos上运行结果就是 mailx,这个估计还是和os有关,转载者注)
linux系统中有个符号链接:/proc/self/exe 它代表当前程序,所以可以用readlink读取它的源路径就可以获取当前程序的绝对路径,如下:
#include <unistd.h>#include <stdio.h> int main(int argc , char* argv[]){char buf[1024] = { 0 };int n; n = readlink("/proc/self/exe" , buf , sizeof(buf));if( n > 0 && n < sizeof(buf)){printf("%s\n" , buf);}}
经过测试,这个办法得到的路径完整准确,即使制作一个软连接,然后放在别的目录下运行,也能得到正确的路径
而改用如下代码,则会因为软链接的位置变化而出先不一样的结果
#include <unistd.h>int main(){ char buf[1024]; getcwd(buff,sizeof(buff)); cout << buff << endl; //如果用软链接的方式运行,则会得到软链接所在位置的路径}
0 0
- Liunx下获取当前程序路径的方法
- NET下获取程序当前路径的集中方法
- C#获取程序当前路径的方法
- C#获取程序当前路径的方法
- C#获取程序当前路径的方法
- Windows下获取当前程序文件名或完整路径方法
- C#获取当前程序运行路径的方法集合//获取当前进程的完整路径
- C#中获取程序当前路径的集中方法[转]
- C#中获取程序当前路径的集中方法[转]
- C#中获取程序当前路径的集中方法
- C#中获取程序当前路径的方法
- C#中获取程序当前路径的集中方法
- C#中获取程序当前路径的方法
- C#中获取程序当前路径的方法
- C#中获取程序当前路径的集中方法收藏
- C#获取当前程序运行路径的方法集合
- C#中获取程序当前路径的集中方法
- C#中获取程序当前路径的集中方法
- C#WinForm控件开发为属性提供弹出式对话框 或自定义控件
- cclablebmf/cclablettf游戏字体2
- 通过修改DB给cloudstack添加模板
- Https原理
- 意向锁
- Liunx下获取当前程序路径的方法
- JS实现拖动div改变大小
- Linux管理:将Redhat安装ISO设置为yum源
- 腾讯旗下支付公司财付通更名
- Myeclipse从SVN上加载项目时出现jar包混乱和项目里面的文件没错项目名上面有红叉解决方法
- declare-styleable中format详解
- 搜索引擎lucene之文本文件索引
- 用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件) 详细出处参考:http://www.jb51.net/article/30640.htm
- 豆瓣客户端的实现02