unix文件和目录操作的函数stat()、fstat()、lstat()、access()、umask()函数

本文介绍了Unix系统中用于文件和目录操作的几个关键函数,包括stat()用于获取文件属性,fstat()通过文件描述符获取属性,lstat()处理符号链接,access()检查文件操作权限,以及umask()设置文件创建权限。这些函数在文件管理中起着重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(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()函数:用来更改文件的权限



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值