• 函数小结


    最近用到的Linux函数,小结。

    readlink()

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

    ==========================================================================

    access() 函数

    int access(const char * pathname, int mode);

    函数说明:

      access()会检查是否可读/写某一已经存在的文件。参数mode有几种情况组合,R_OK,W_OK,X_OK 和 F_OK。分别是用来鉴定该文件是否有读权限,写权限,执行权限和判断文件是否存在。由于access()只作权限的核审,并不理会文件状态或文件内容,因此,如果一目录便是可写入,便是可以再该目录中建立新文件等操作,而非意味着此目录可以被当做文件处理,例如,你会发现DOS的文件都具有“可执行”权限,但用execve()执行会失败。

    返回值

      若所有欲检查核的权限都通过了检查则返回0值,表示成功,只要有一权限被禁止则返回-1.

    ==========================================================================

     EnterCriticalSection函数和LeaveCriticalSection函数

    CRITICAL_SECTION cs;

     EnterCriticalSection(&cs);

    cs表示是一个全局锁,并且 EnterCriticalSection()函数的作用是加锁,而之后的代码处理过程是不允许其他线程进行操作,除非遇到LeaveCriticalSection。

    EnterCriticalSection()函数的作用是多个线程操作相同的数据时,一般是需要按顺序访问的,否则会导致数据错乱,无法控制数据,变成随机变量。为了解决这个问题,引入了一个全局互斥量,让每个线程按照顺序的访问变量,并且在每个EnterCriticalSection()函数加锁之后,而后的代码处理过程是不允许其他线程进行操作的,除非遇到LeaveCriticalSection函数。

    ==========================================================================

    stat()函数

    表头文件:    #include <sys/stat.h> 
    函数定义:    int stat(const char *file_name, struct stat *buf); 
    函数说明:  通过文件名filename获取文件信息,并保存在buf所指的结构体stat中 
    返回值:     执行成功则返回0,失败返回-1,错误代码存于errno(需要include <errno.h>)

    stat结构体的定义是

    struct stat { 
        dev_t         st_dev;       //文件的设备编号 
        ino_t         st_ino;         //节点 
        mode_t        st_mode;   //文件的类型和存取的权限 
        nlink_t       st_nlink;      //连到该文件的硬连接数目,刚建立的文件值为1 
        uid_t         st_uid;        //用户ID 
        gid_t         st_gid;        //组ID 
        dev_t         st_rdev;     //(设备类型)若此文件为设备文件,则为其设备编号 
        off_t         st_size;       //文件字节数(文件大小) 
        unsigned long st_blksize;   //块大小(文件系统的I/O 缓冲区大小) 
        unsigned long st_blocks;   //块数 
        time_t        st_atime;      //最后一次访问时间 
        time_t        st_mtime;     //最后一次修改时间 
        time_t        st_ctime;     //最后一次改变时间(指属性) 
    };

    错误返回:

    errno错误代码: 
        ENOENT         参数file_name指定的文件不存在 
        ENOTDIR        路径中的目录存在但却非真正的目录 
        ELOOP          欲打开的文件有过多符号连接问题,上限为16符号连接 
        EFAULT         参数buf为无效指针,指向无法存在的内存空间 
        EACCESS        存取文件时被拒绝 
        ENOMEM         核心内存不足 
        ENAMETOOLONG   参数file_name的路径名称太长

    stat例子:

    #include <sys/stat.h>
    #include <stdio.h>
    #include <errno.h>
    
    int main()
    {
        struct stat buf;
        int res = stat("test.txt", &buf);
        if(res != 0)
        {
            printf("stat file fail!
    ");
    
            printf("%d
    ", errno);
        }
        return 0;
    }
  • 相关阅读:
    zlib压缩一个文件为gzip格式
    最短路径算法Dijkstra
    用MonoDevelop开发Linux游戏
    Flask入门1HelloWorld
    Windows+Linux打造和谐的开发环境
    WinCE 6.0下的编译选项
    使用cvrtbin.exe转换bin文件到nb0
    美的电磁炉(SK2106)加热断断续续问题的快速修复(原创)
    解决XP下双网卡不能同时用
    USB驱动程序打包(转)
  • 原文地址:https://www.cnblogs.com/chenyang920/p/5722429.html
Copyright © 2020-2023  润新知