Unix文件属性相关系统调用

Posted IIcyZhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unix文件属性相关系统调用相关的知识,希望对你有一定的参考价值。

#include <sys/types.h>
       #include <sys/stat.h>
       #include <unistd.h>

       int stat(const char *path, struct stat *buf);

       int fstat(int fd, struct stat *buf);

       int lstat(const char *path, struct stat *buf);

           struct stat
               dev_t     st_dev;     /* ID of device containing file */
               ino_t     st_ino;     /* inode number */
               mode_t    st_mode;    /* protection */
               nlink_t   st_nlink;   /* number of hard links */
               uid_t     st_uid;     /* user ID of owner */
               gid_t     st_gid;     /* group ID of owner */
               dev_t     st_rdev;    /* device ID (if special file) */
               off_t     st_size;    /* total size, in bytes */
               blksize_t st_blksize; /* blocksize for file system I/O */
               blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
               time_t    st_atime;   /* time of last access */
               time_t    st_mtime;   /* time of last modification */
               time_t    st_ctime;   /* time of last status change */
           ;


       The following POSIX macros are defined to check the file type using the st_mode field:

           S_ISREG(m)  is it a regular file?

           S_ISDIR(m)  directory?

           S_ISCHR(m)  character device?
           S_ISBLK(m)  block device?

           S_ISFIFO(m) FIFO (named pipe)?

           S_ISLNK(m)  symbolic link? (Not in POSIX.1-1996.)

           S_ISSOCK(m) socket? (Not in POSIX.1-1996.)


       The following flags are defined for the st_mode field:


           S_IFMT     0170000   bit mask for the file type bit fields
           S_IFSOCK   0140000   socket
           S_IFLNK    0120000   symbolic link
           S_IFREG    0100000   regular file
           S_IFBLK    0060000   block device
           S_IFDIR    0040000   directory
           S_IFCHR    0020000   character device
           S_IFIFO    0010000   FIFO
           S_ISUID    0004000   set UID bit
           S_ISGID    0002000   set-group-ID bit (see below)
           S_ISVTX    0001000   sticky bit (see below)
           S_IRWXU    00700     mask for file owner permissions
           S_IRUSR    00400     owner has read permission
           S_IWUSR    00200     owner has write permission
           S_IXUSR    00100     owner has execute permission
           S_IRWXG    00070     mask for group permissions
           S_IRGRP    00040     group has read permission
           S_IWGRP    00020     group has write permission
           S_IXGRP    00010     group has execute permission
           S_IRWXO    00007     mask for permissions for others (not in group)
           S_IROTH    00004     others have read permission
           S_IWOTH    00002     others have write permission
           S_IXOTH    00001     others have execute permission

    

       #include <unistd.h>
 int access(const char *pathname, int mode);  mode:F_OK, R_OK, W_OK, and X_OK.   成功返回0, 失败返回 -1

        F_OK tests for the existence of the file.  R_OK, W_OK, and X_OK test whether the file exists and grants read, write,  and execute permissions.

       

       #include <sys/types.h>
       #include <sys/stat.h>
    mode_t umask(mode_t mask);  返回之前的mode_t掩码

     umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。

其中cmask对应下面的9个位的“或”值: S_IRUSR 用户读 S_IWUSR 用户写 S_IXUSR 用户执行 S_IRGRP 组读 S_IWGRP 组写 S_IXGRP 组执行 S_IROTH 其他读 S_IWOTH 其他写 S_IXOTH 其他执行 umask值与权限 umask屏蔽的权限位就不再具体有,以后在 open creat时候设置打开也不行,只能重新设置umask umask 文件 目录 0 6 7 600 710 1 6 6 500 611 2 4 5 421 532 3 4 4 322 433 4 2 3 243 354 5 2 2 144 255 6 0 1 065 176 7 0 0 066 077 ----------------------------------------------------------------------------------------        #include <sys/stat.h>
       int chmod(const char *path, mode_t mode);

       int fchmod(int fd, mode_t mode);

-------------------------------------------------------------------------------------

       #include <unistd.h>
       int chown(const char *path, uid_t owner, gid_t group);
       int fchown(int fd, uid_t owner, gid_t group);
       int lchown(const char *path, uid_t owner, gid_t group);

       uid_t, gid_t为-1时不改变。

-------------------------------------------------------------------------------------

       #include <unistd.h>
       #include <sys/types.h>
       int truncate(const char *path, off_t length);
       int ftruncate(int fd, off_t length);


以上是关于Unix文件属性相关系统调用的主要内容,如果未能解决你的问题,请参考以下文章

Linux内核虚拟文件系统

Unix系统调用

Unix Linux | 文件系统

Unix系统编程

Unix系统编程()close系统调用

在linux中用lsattr命令查看到一个文件的属性为e,是啥意思啊?