码迷,mamicode.com
首页 > 其他好文 > 详细

第四章 文件和目录

时间:2015-04-04 12:09:03      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

本章主要介绍文件目录的创建、删除、读写、设置访问权限以及获取文件或目录的属性等;

唯一需要强调的可能就是:目录也是一种文件

 

获取文件目录的属性


 

关键函数

stat/fstat/lstat用于获取文件的信息,如文件的所有者,权限,修改和访问时间等等

     #include <sys/stat.h>

     int
     fstat(int fildes, struct stat *buf); // 获取已打开的文件的相关信息

     int
     fstat64(int fildes, struct stat64 *buf); // 获取已打开的文件的相关信息

     int
     lstat(const char *restrict path, struct stat *restrict buf); // 获取符号链接文件的相关信息[不是被链接的文件的信息]

     int
     lstat64(const char *restrict path, struct stat64 *restrict buf); // 获取符号链接文件的相关信息[不是被链接的文件的信息] 

     int
     stat(const char *restrict path, struct stat *restrict buf);// 通过文件名获取文件的相关信息

     int
     stat64(const char *restrict path, struct stat64 *restrict buf);//通过文件名获取相关的信息

 

 

关键结构体

struct stat {
         dev_t    st_dev;    /* device inode resides on */
         ino_t    st_ino;    /* inode‘s number */
         mode_t   st_mode;   /* inode protection mode */
         nlink_t  st_nlink;  /* number or hard links to the file */
         uid_t    st_uid;    /* user-id of owner */
         gid_t    st_gid;    /* group-id of owner */
         dev_t    st_rdev;   /* device type, for special file inode */
         struct timespec st_atimespec;  /* time of last access */
         struct timespec st_mtimespec;  /* time of last data modification */
         struct timespec st_ctimespec;  /* time of last file status change */
         off_t    st_size;   /* file size, in bytes */
         quad_t   st_blocks; /* blocks allocated for file */
         u_long   st_blksize;/* optimal file sys I/O ops blocksize */
         u_long   st_flags;  /* user defined flags for file */
         u_long   st_gen;    /* file generation number */
 };


 struct stat64 {
         dev_t           st_dev;           /* ID of device containing file */
         mode_t          st_mode;          /* Mode of file (see below) */
         nlink_t         st_nlink;         /* Number of hard links */
         ino64_t         st_ino;          /* File serial number */
         uid_t           st_uid;           /* User ID of the file */
         gid_t           st_gid;           /* Group ID of the file */
         dev_t           st_rdev;          /* Device ID */
         struct timespec st_atimespec;     /* time of last access */
         struct timespec st_mtimespec;     /* time of last data modification */
         struct timespec st_ctimespec;     /* time of last status change */
         struct timespec st_birthtimespec; /* time of file creation(birth) */
         off_t           st_size;          /* file size, in bytes */
         blkcnt_t        st_blocks;        /* blocks allocated for file */
         blksize_t       st_blksize;       /* optimal blocksize for I/O */
         uint32_t        st_flags;         /* user defined flags for file */
         uint32_t        st_gen;           /* file generation number */
         int32_t         st_lspare;        /* RESERVED: DO NOT USE! */
         int64_t         st_qspare[2];     /* RESERVED: DO NOT USE! */
 };
 

 

access


 

<unistd.h>

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

测试文件、目录访问权限

mode 参数:

R_OK   是否可读

W_OK  是否可写

X_OK   是否可执行

F_OK   是否存在

被测试文件具有对应的权限时,函数返回0;否则返回-1

 

umask


 

<sys/types.h>

<sys/stat.h>

mode_t umask(mode_t cmask);

在程序运行时创建屏蔽字,控制所有新创建文件的许可权限

参数 mode_t为下列9种权限的‘或’

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

S_IRUSR     用户-读

S_IWUSR    用户-写

S_IXUSR     用户-执行

 

S_IRGRP      组-读

S_IWGRP     组-写

S_IXGRP      组-执行

 

S_IROTH     其他-读

S_IWOTH    其他-写

S_IXOTH     其他-执行

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

 

chmod/fchmod


 

chmod用于对未打开的文件进行权限变更;fchmod用于对已打开的文件进行权限变更;

<sys/types.h>

<sys/stat.h>

int chmod(const char* path, mode_t mode);

int fchmod(int fileds, mode_t mode);

权限更改成功返回0;否则返回-1;

参数:mode

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

S_ISUID        执行时设置-用户-ID

S_ISGID        执行时设置-组-ID

S_ISVTX        保存正文

 

S_IRWXU      用户(所有者)读、写和执行

S_IRUSR       用户(所有者)读

S_IWUSR      用户(所有者)写

S_IXUSR       用户(所有者)执行

 

S_IRWXG       组读、写和执行

S_IRGRP        组读

S_IWGRP       组写

S_IXGRP        组执行

 

S_IRWXO       其他读、写和执行

S_IROTH        其他读

S_IWOTH       其他写

S_IXOTH        其他执行

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

说明:要成功更改文件权限,进程的有效用户ID必须是文件的所有者,或者具有超级用户许可权限

 

chown/fchown/lchown


 

变更文件所有者

<sys/types.h>

<unistd.h>

int chown(const char* path, uid_t owner, gid_t group);

int fchown(int fileds, uid_t owner, gid_t group);

int lchown(const char* path, uid_t owner, gid_t group);

 

说明:lchown改变的符号链接本身的所有者,不是符号链接所指向文件的所有者

要成功更改文件所有者需要程序执行用户拥有相应的权限

 

truncate/ftruncate[文件截短]


 

<sys/types.h>

<unistd.h>

int truncate(const char* path, off_t length);

int ftruncate(int filedes, off_t length);

函数执行成功返回0;出错返回-1;

如果文件的长度大于length,则函数执行成功后超过length意外的数据不能再继续访问; 如果文件长度小于length,则文件尾部没有数据,形成一个空洞;

 

link/unlink/symlink/readlink/rename/remove


 

创建链接、删除链接、创建符号链接、读链接、重命名、删除

 

mkdir/rmdir/opendir/readdir/closedir/rewinddir/chdir/fchdir/getcwd


 

目录操作函数

 

utime[获取文件的最后访问时间、修改时间]


 

 

 

 

 


reference

Unix环境高级编程

https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man2/stat.2.html

 

第四章 文件和目录

标签:

原文地址:http://www.cnblogs.com/zstang/p/4391826.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!