linux上的readlink函数详细相关函数: stat、lstat、symlink
头文件: #include unistd.h
定义函数: intreadlink(constchar*path,char *buf,size_tbufsiz );
函数说明: readlink ) )将参数path的符号连接内容返回到参数buf指向的内存空间。 返回的内容不是以NULL结尾,而是返回字符串的字符数。 如果参数bufsiz小于符号链接的内容长度,过长的内容将被截断
返回值:如果成功,则传递符号链接指向的文件路径字符串。 失败时返回-1,错误代码保存在errno中
错误代码:
EACCESS在获取文件时被拒绝,权限不足
EINVAL参数bufsiz是负数
EIO访问错误
ELOOP尝试打开的文件中存在太多符号连接问题
名称too long参数path的路径名太长
由ENOENT参数path指定的文件不存在
ENOMEM核心内存不足
ENOTDIR参数路径中的目录存在,但不是实际目录
一例:
#include stdio.h
#include unistd.h
#define PATH_MAX 1024
char * get_exe_path (
{
静态char buf [ path _ max ];
int i;
int rslt=readlink (/proc/self/exe )、buf、PATH_MAX );
if(rslt0|||rslt=path_max ) )
{
返回空值;
}
buf[rslt]=' ';
for(I=RSLT; i=0; I----)
{
printf(buf[%d]%c(n ),I,buf[i] );
if(buf[I]=='/' )
{
buf[i 1]=' ';
布雷克;
}
}
返回缓冲区;
}
(intmain(intargc,char ** argv ) ) ) ) ) ) ) )。
{
printf('%sn ',get_exe_path );
返回0;
}
例2(: )我个人觉得这个程序很合理。 推荐。
#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 (rslt0||(rslt=计数-1) )
{
返回空值;
}
buf[rslt]=' ';
for(I=RSLT; i=0; I----)
{
printf(buf[%d]%c(n ),I,buf[i] );
if(buf[I]=='/' )
{
buf[i 1]=' ';
布雷克;
}
}
返回缓冲区;
}
(intmain(intargc,char ** argv ) ) ) ) ) ) ) )。
{
char path[1024];
printf('%sn ',get_exe_path ) path,1024 );
返回0;
}