(1)stat()函数:通过文件名filename来获取文件的属性值
表头文件: #include <sys/stat.h>
#include <unistd.h>
定义函数: int stat(const char *file_name, struct stat *buf);
函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中
返回值: 执行成功则返回0,失败返回-1,错误代码存于errno
结构体stat相关的内容:
struct stat {
dev_t st_dev; //文件的设备编号
ino_t st_ino; //节点
mode_t st_mode; //文件的类型和存取的权限(该属性下面包含很多宏来处理文件的类型以及文件的存取权限)
nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1
uid_t st_uid; //用户ID
gid_t st_gid; //组ID
dev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号
off_t st_size; //文件字节数(文件大小)
unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小)
unsigned long st_blocks; //块数
time_t st_atime; //最后一次访问时间
time_t st_mtime; //最后一次修改时间
time_t st_ctime; //最后一次改变时间(指属性)
};
例子:
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
int main() {
struct stat buf;
stat("/etc/hosts", &buf);
printf("/etc/hosts file size = %d/n", buf.st_size);
}
(2)fstat()函数:由文件描述符来获取文件的属性
相关函数 stat,lstat,chmod,chown,readlink,utime
表头文件 #include<sys/stat.h>
#include<unistd.h>
定义函数 int fstat(int fildes,struct stat *buf);(stat的说明如上)
函数说明 fstat()用来将参数fildes所指的文件状态,复制到参数buf所指的
结构中(struct stat)。Fstat()与stat()作用完全相同,不同处在
于传入的参数为已打开的文件描述词。详细内容请参考stat()。
返回值 执行成功则返回0,失败返回-1。
(3)lstat()函数:根据文件名来获取文件的属性
函数原型:int lstat(const char *path, struct stat *buf);
该函数类似于stat函数,但是当文件是一个符号链接的时候lstat返回该符号链接的有关信息,而不是由该符号链接引用的文件的信息。
(4)access()函数:检查文件可以执行某种操作
功能描述:
检查调用进程是否可以对指定的文件执行某种操作。
用法:
#include <unistd.h>
#include <fcntl.h>
int access(const char *pathname, int mode);
参数:
pathname: 需要测试的文件路径名。
mode: 需要测试的操作模式,可能值是一个或多个R_OK(可读?), W_OK(可写?), X_OK(可执行?) 或 F_OK(文件存在?)组合体。
返回说明: 成功执行时,返回0。失败返回-1,
(5)umask()函数:进程设置文件方式创建屏蔽字,即设置文件的权限,最大的权限是0777
#include "sys/types.h"
#include "sys/stat.h"
mode_t umask(mode_t cmask);
umask函数为进程设置文件方式创建屏蔽字。
unix中文件最大访问权限是0777, 即_rwxrwxrwx.
如果讲umask函数设置为0111, 那么用0777与0111(umask设置值)取异或操作得0666,即_rw_rw_rw.
当进程使用open或creat创建新文件时, 存取权限就是指定存取权限同0666的位与结果。
譬如下列代码:
umask(0111);
creat("newfile", 0777);
得到的newfile的存取权限仍然是0666,即0777&0666=0666, 这就是umask的作用, 有点子网掩码的味道。
(6)chmod()和fchmod()函数:用来更改文件的权限