标签:
本章主要介绍文件目录的创建、删除、读写、设置访问权限以及获取文件或目录的属性等;
唯一需要强调的可能就是:目录也是一种文件
获取文件目录的属性
关键函数
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