首页 > 编程知识 正文

app打印错误日志,java -version未找到命令

时间:2023-05-03 22:45:16 阅读:23854 作者:2060

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。