unix文件和目录操作的函数stat()、fstat()、lstat()、access()、umask()函数

(1)stat()函数:通过文件名filename来获取文件的属性值

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

结构体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;     //最后一次改变时间(指属性)
};

例子:

#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
int main() {
    struct stat buf;
    stat("/etc/hosts", &buf);
    printf("/etc/hosts file size = %d/n", buf.st_size);
}

(2)fstat()函数:由文件描述符来获取文件的属性

相关函数 stat,lstat,chmod,chown,readlink,utime
表头文件 #include<sys/stat.h>
#include<unistd.h>
定义函数 int fstat(int fildes,struct stat *buf);(stat的说明如上)
函数说明 fstat()用来将参数fildes所指的文件状态,复制到参数buf所指的
结构中(struct stat)。Fstat()与stat()作用完全相同,不同处在
于传入的参数为已打开的文件描述词。详细内容请参考stat()。
返回值 执行成功则返回0,失败返回-1。

(3)lstat()函数:根据文件名来获取文件的属性

函数原型:int lstat(const char *path, struct stat *buf);

该函数类似于stat函数,但是当文件是一个符号链接的时候lstat返回该符号链接的有关信息,而不是由该符号链接引用的文件的信息。 

(4)access()函数:检查文件可以执行某种操作

功能描述: 
检查调用进程是否可以对指定的文件执行某种操作。 
用法: 
#include <unistd.h>
#include <fcntl.h>
int access(const char *pathname, int mode); 
参数: 
pathname: 需要测试的文件路径名。 
mode: 需要测试的操作模式,可能值是一个或多个R_OK(可读?), W_OK(可写?), X_OK(可执行?) 或 F_OK(文件存在?)组合体。 
返回说明: 成功执行时,返回0。失败返回-1,

(5)umask()函数:进程设置文件方式创建屏蔽字,即设置文件的权限,最大的权限是0777

#include "sys/types.h"
#include "sys/stat.h"
mode_t umask(mode_t cmask);
umask函数为进程设置文件方式创建屏蔽字。
unix中文件最大访问权限是0777, 即_rwxrwxrwx.
如果讲umask函数设置为0111, 那么用0777与0111(umask设置值)取异或操作得0666,即_rw_rw_rw.
当进程使用open或creat创建新文件时, 存取权限就是指定存取权限同0666的位与结果。
譬如下列代码:
umask(0111);
creat("newfile", 0777);
得到的newfile的存取权限仍然是0666,即0777&0666=0666, 这就是umask的作用, 有点子网掩码的味道。

(6)chmod()和fchmod()函数:用来更改文件的权限



你可能感兴趣的:(struct,unix,File,测试,Access,Path)