inux关于readlink函数获取运行路径的小程序
2015-07-01 00:05
453 查看
inux关于readlink函数获取运行路径的小程序
相关函数: stat, lstat, symlink表头文件: #include <unistd.h>
定义函数:int readlink(const char *path, char *buf, size_t bufsiz);
函数说明:readlink()会将参数path的符号连接内容到参数buf所指的内存空间,返回的内容不是以NULL作字符串结尾,但会将字符串的字符数返回。若参数bufsiz小于符号连接的内容长度,过长的内容会被截断
返回值 :执行成功则传符号连接所指的文件路径字符串,失败返回-1, 错误代码存于errno
错误代码:
EACCESS 取文件时被拒绝,权限不够
EINVAL 参数bufsiz为负数
EIO O存取错误
ELOOP 欲打开的文件有过多符号连接问题
ENAMETOOLONG 参数path的路径名称太长
ENOENT 参数path所指定的文件不存在
ENOMEM 核心内存不足
ENOTDIR 参数path路径中的目录存在但却非真正的目录
例一:
#include <stdio.h>
#include <unistd.h>
#define PATH_MAX 1024
char * get_exe_path()
{
static char buf[PATH_MAX];
int i;
int rslt = readlink("/proc/self/exe", buf, PATH_MAX);
if (rslt < 0 || rslt >= PATH_MAX)
{
return NULL;
}
buf[rslt] = '\0';
for (i = rslt; i >= 0; i--)
{
printf("buf[%d] %c\n", i, buf[i]);
if (buf[i] == '/')
{
buf[i + 1] = '\0';
break;
}
}
return buf;
}
int main(int argc, char ** argv)
{
printf("%s\n", get_exe_path());
return 0;
}
例二:(个人感觉这个程序比较合理, 推荐)
#include <stdio.h>
#include <unistd.h>
char * get_exe_path( char * buf, int count)
{
int i;
int rslt = readlink("/proc/self/exe", buf, count - 1);
if (rslt < 0 || (rslt >= count - 1))
{
return NULL;
}
buf[rslt] = '\0';
for (i = rslt; i >= 0; i--)
{
printf("buf[%d] %c\n", i, buf[i]);
if (buf[i] == '/')
{
buf[i + 1] = '\0';
break;
}
}
return buf;
}
int main(int argc, char ** argv)
{
char path[1024];
printf("%s\n", get_exe_path(path, 1024));
return 0;
}
相关文章推荐
- inux关于readlink函数获取运行路径的小程序
- 微信浏览器轮播图的使用经验
- 微信开放平台之公众号第三方平台开发及全网发布验证
- Android;Share SDK微信分享中遇到的问题以及解决方法
- 微信jssdk已无力吐槽
- 高仿微信实现左滑显示删除按钮功能
- 高仿微信本地图片选择器
- 微信公众号一键关注解决办法
- 微信支付(0923更新)商户支付密钥key的生成与设置
- 在iPhone4的微信,切换效果时背景会闪一下
- 微信业务处理:职责链模式
- css3模拟微信摇一摇
- 微信连WiFi关注公众号流程更新 解决ios微信扫描二维码不关注就能上网的问题
- 微信支付详解
- iOS 二维码ZBarSDK类似微信的扫一扫
- 微信浏览器自带的返回上一页的停留位置 scrollTop
- 微信浏览器自带的返回上一页的停留位置 scrollTop
- 微信分享
- iOS 集成微信支付【转载】
- 微信公众平台JSSDK开发