5. 文件权限操作
1.函数stat
1 #include <sys/types.h> 2 int stat(const char *path, struct stat *buf);
函数功能:获得指定path文件的所有信息存储于buf结构中
返回值:操作成功返回0,失败返回-1
stat结构体:
struct stat { dev_t st_dev; // 文件使用的设备号 ino_t st_ino; // 索引节点号 mode_t st_mode; // 文件对应的模式,文件,目录等 nlink_t st_nlink; // 文件的硬连接数 uid_t st_uid; // 所有者用户识别号 gid_t st_gid; // 组识别号 dev_t st_rdev; // 设备文件的设备号 off_t st_size; // 以字节为单位的文件容量 blksize_t st_blksize; // 包含该文件的磁盘块的大小 blkcnt_t st_blocks; // 该文件所占的磁盘块 time_t st_atime; // 最后一次访问该文件的时间 time_t st_mtime; // 最后一次修改该文件的时间 time_t st_ctime; // 最后一次改变该文件状态的时间 };
与stat类似功能的函数fstat:
#include <sys/types.h> int fstat(int fd, struct stat *buf);
与stat的区别在于输入的参数是一个文件描述符。
2.unix文件类型
1)普通文件
最常见的文件类型,包含一些数据。
2)目录文件
这种文件包含了其他文件的名字以及指向这些文件有关信息的指针。
3)块特殊文件
这种类型的文件提供对设备(如磁盘)的带缓冲访问,每次访问以固定长度的单位进行。
4)字符特殊文件
这种类型的文件提供对设备不带缓冲的访问,每次访问长度可变。系统中的设备要么是块特殊文件,要么是字符特殊文件。
5)FIFO
命名管道,常用于进程间通信。
6)套接字
用于进程间的网络通信。
7)符号链接
这种类型的文件指向另一个文件。
unit对上述文件类型定义了相关的宏来确定文件类型:
1 S_ISLNK (st_mode) // 判断是否为符号连接 2 S_ISREG (st_mode) // 是否为一般文件 3 S_ISDIR (st_mode) // 是否为目录 4 S_ISCHR (st_mode) // 是否为字符装置文件
//...其他不常用的略
3.判断文件权限
access函数:
1 #include<unistd.h> 2 int access(const char* pathname, int mode);
函数功能:判断pathname路径的文件是否有指定权限,成功则返回0,否则返回-1。mode的取值为:
1 F_OK 值为0,判断文件是否存在 2 X_OK 值为1,判断对文件是可执行权限 3 W_OK 值为2,判断对文件是否有写权限 4 R_OK 值为4,判断对文件是否有读权限 5 可以使用或“|”的方式,一起使用,如W_OK|R_OK
4.修改文件权限
函数chmod与fchmod:
#include <sys/stat.h> int chmod( const char *pathname, mode_t mode ); int fchmod( int fd, mode_t mode ); 两个函数返回值:若成功则返回0,若出错则返回-1
chmod函数功能:修改指定文件的权限。
fchmod函数功能:修改已打开的文件的权限。

浙公网安备 33010602011771号