zoukankan      html  css  js  c++  java
  • C函数之readlink

    函数原型;

    #include<unistd.h>
    ssize_t readlink(const char *path, char *buf, size_t bufsiz);

    函数说明:

    readlink()会将参数path的符号链接内容存储到参数buf所指的内存空间,返回的内容不是以00作字符串结尾,但会将字符串的字符数返回,这使得添加00变得简单。若参数bufsiz小于符号连接的内容长度,过长的内容会被截断,如果 readlink 第一个参数指向一个文件而不是符号链接时,readlink 设 置errno 为 EINVAL 并返回 -1。 readlink()函数组合了open()、read()和close()的所有操作。

    path是一个存在的软连接。

    返回值:

    执行成功则返回字符串的字符数,失败返回-1, 错误代码存于errno。

     

    错误代码:

    EACCESS 取文件时被拒绝,权限不够

    EINVAL 参数bufsiz为负数

    EIO O存取错误

    ELOOP 欲打开的文件有过多符号连接问题

    ENAMETOOLONG 参数path的路径名称太长

    ENOENT 参数path所指定的文件不存在

    ENOMEM 核心内存不足

    ENOTDIR 参数path路径中的目录存在但却非真正的目录

    实例:

    /***
    readlink.c
    ***/
    #include<stdio.h>
    #include<errno.h>
    #include<unistd.h>
    
    char *get_exe_path(char *buf, int count)
    {
        int i;
        
        int result = readlink("/home/ubuntu14-04/workspace/abcd",buf,count - 1);
        if (result < 0 || (result >= count - 1))
        {
            perror("readlink ");
            return NULL;
        }
    
        buf[result] = '';
        for (i = result; i >= 0; i--)
        {
            printf("buf[%d] %c
    ",i,buf[i]);
            if (buf[i] == '/')
            {
                buf[i+1] = '';
                break;
            }
        }
    
        return buf;
    }
    
    int main()
    {
        char path[1024];
        printf("%s
    ",get_exe_path(path,1024));
        return 0;
    }

    运行结果:

  • 相关阅读:
    win7网络共享原来如此简单,WiFi共享精灵开启半天都弱爆了!
    JQUERY UI Datepicker Demo
    Official online document, install svn server in centOS
    JAVE not work in linux
    AMR 转mp3 失败
    XD, XR, DR 股票
    Linux 下MySql 重置密码
    Difinition Of Done
    Apache, Tomcat, JK Configuration Example
    Linux 安装tomcat
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11834613.html
Copyright © 2011-2022 走看看