readlink命令标记: ubuntulinux工具file 2012-03-15 14:063674人阅读评论(1)收藏通报分类: linux系统(184 ) c语言) 92 ) readlink是
在Ubuntu系统上运行以下命令:
33558 www.Sina.com/viewplaincopy $ readlink-- help可以显示和运行readlink命令的帮助信息
请参阅33558 www.Sina.com/viewplaincopy $ man readlink帮助文档。
readlink命令的用途说明可从帮助信息中获得。
[plain]
英语:
[plain]
示例:
系统中的awk命令运行哪个可执行文件呢?
33558 www.Sina.com/viewplaincopy $ readlink/usr /混乱的洋葱/awk/etc/alternatives/awk----其实这是$readlink/etc
-f选项可以递归地跟随提供文件名的所有符号链接进行标准化。 除了最后一个组件以外,所有组件都必须存在。
简单来说,就是跟随符号链接到文件而不是符号链接的位置。 最后,存在必须存在不是符号链接的文件的限制。
3358 www.Sina.com/viewplaincopy $ readlink-f/usr /混乱的洋葱/a
输出符号链接值或者权威文件名
3358 blog.csdn.net/DJ Zhao/article/details/8178375
相关函数: stat、lstat、symlink
头文件: #include unistd.h
定义函数: intreadlink(constchar*path,char *buf,size_tbufsiz );
函数说明: readlink ) )将参数path的符号链接的内容存储在参数buf指向的内存空间中。 返回值以000结尾,但返回字符串中的字符数。 这样就很容易添加000。 如果参数bufsiz小于符号链接的内容长度,则会截断过长的内容。 如果readlink的第一个参数指向文件而不是符号链接,则readlink将errno设置为EINVAL并返回-1。 readlink (函数是open、read、close ) )中所有操作的组合。
返回值:如果成功,则传递符号链接指向的文件路径字符串。 失败时返回-1,错误代码保存在errno中
错误代码:
EACCESS在获取文件时被拒绝,权限不足
EINVAL参数bufsiz是负数
EIO访问错误
ELOOP尝试打开的文件中存在太多符号连接问题
p class="p2"> 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;
/* /proc/self/exe -> /a/b/c*/
int rslt = readlink("/proc/self/exe", buf, PATH_MAX);// buf返回"/a/b/c"
if (rslt < 0 || rslt >= PATH_MAX)
{
return NULL;
}
buf[rslt] = ' ';
for (i = rslt; i >= 0; i--)
{
printf("buf[%d] %cn", i, buf[i]);
if (buf[i] == '/')
{
buf[i + 1] = ' ';
break;
}
}
return buf;
}
int main(int argc, char ** argv)
{
printf("%sn", 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] = ' ';
for (i = rslt; i >= 0; i--)
{
printf("buf[%d] %cn", i, buf[i]);
if (buf[i] == '/')
{
buf[i + 1] = ' ';
break;
}
}
return buf;
}
int main(int argc, char ** argv)
{
char path[1024];
printf("%sn", get_exe_path(path, 1024));
return 0;
}
转载于:https://www.cnblogs.com/spaceport/p/6264399.html