白话Linux下C编程(三)文件入门(2):文件的属性

白话Linux下C编程(三)文件入门(2):文件的属性

文件具有各种各样的属性,除了我们上面所知道的文件权限以外,文件还有创建时间,大小等等属性。有时侯我们要判断文件是否可以进行某种操作(读,写等等)。这个时候我们可以使用access函数。

#include <unistd.h>;

int access(const char *pathname,int mode);

pathname:是文件名称,mode是我们要判断的属性。可以取以下值或者是他们的组合。

R_OK文件可以读,W_OK文件可以写,X_OK文件可以执行,F_OK文件存在。当我们测试成功时,函数返回0,否则如果有一个条件不符时,返回-1。

如果我们要获得文件的其他属性,我们可以使用函数stat或者fstat。

#include <sys/stat.h>;

#include <unistd.h>;

int stat(const char *file_name,struct stat*buf);

int fstat(int filedes,struct stat *buf);

struct stat {

dev_t st_dev;/* 设备 */

ino_t st_ino;/* 节点 */

mode_t st_mode;/* 模式 */

nlink_tst_nlink; /* 硬连接 */

uid_t st_uid;/* 用户ID */

gid_t st_gid;/* 组ID */

dev_t st_rdev;/* 设备类型 */

off_t st_off;/* 文件字节数 */

unsigned longst_blksize; /* 块大小 */

unsigned longst_blocks; /* 块数 */

time_tst_atime; /* 最后一次访问时间 */

time_tst_mtime; /* 最后一次修改时间 */

time_tst_ctime; /* 最后一次改变时间(指属性) */

};

stat用来判断没有打开的文件,而fstat用来判断打开的文件。我们使用最多的属性是st_

mode。通过着属性我们可以判断给定的文件是一个普通文件还是一个目录,连接等等。可以使用下面几个宏来判断。

S_ISLNK(st_mode):是否是一个连接。S_ISREG是否是一个常规文件。S_ISDIR是否是一个目录S_ISCHR是否是一个字符设备。S_ISBLK是否是一个块设备S_ISFIFO是否是一个FIFO文件。S_ISSOCK是否是一个SOCKET文件。我们会在下面说明如何使用这几个宏的。

在乎的是看风景的心情,旅行不会因为美丽的风景终止。

白话Linux下C编程(三)文件入门(2):文件的属性

相关文章:

你感兴趣的文章:

标签云: