zoukankan      html  css  js  c++  java
  • 函数小结

    最近用到的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;
    }
  • 相关阅读:
    【HDOJ】2774 Shuffle
    【POJ】2170 Lattice Animals
    【POJ】1084 Square Destroyer
    【POJ】3523 The Morning after Halloween
    【POJ】3134 Power Calculus
    【Latex】如何在Latex中插入伪代码 —— clrscode3e
    【HDOJ】4801 Pocket Cube 的几种解法和优化
    【HDOJ】4080 Stammering Aliens
    【HDOJ】1800 Flying to the Mars
    SQL语法
  • 原文地址:https://www.cnblogs.com/chenyang920/p/5722429.html
Copyright © 2011-2022 走看看