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
View Code

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函数功能:修改已打开的文件的权限。

posted @ 2021-05-20 22:46  博客员_小李  阅读(77)  评论(0)    收藏  举报