一、lstat,是一种文件描述词。意思是获取一些文件相关的信息。
函数名: lstat
功 能: 获取一些文件相关的信息
用 法: int lstat(const char *path, struct stat *buf);
返回值:成功返回0。
参数:
path:文件路径名。
filedes:文件描述词。
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; /* 分配给文件的块的数量,512字节为单元 */
time_t st_atime; /* 最后访问时间 */
time_t st_mtime; /* 最后修改时间 */
time_t st_ctime; /* 最后状态改变时间 */
};
二、S_ISDIR 、S_ISLNK等几个常见的宏
S_ISLNK(st_mode):是否是一个连接.
S_ISREG(st_mode):是否是一个常规文件.
S_ISDIR(st_mode):是否是一个目录
S_ISCHR(st_mode):是否是一个字符设备.
S_ISBLK(st_mode):是否是一个块设备
S_ISFIFO(st_mode):是否 是一个FIFO文件.
S_ISSOCK(st_mode):是否是一个SOCKET文件
我们使用最多的属性是st_mode,如果返回真,代表是目录或者连接等等;
三、用法实例
#include <sys/stat.h>
int main(int argc,char** argv)
{
struct stat buf;
if( lstat("./Documents",&buf) < 0)
{
perror("lstat error\n");
return -1;
}
if(S_ISDIR(buf.st_mode))
{
printf("is dir\n");
}
if(S_ISREG(buf.st_mode))
{
printf("is normal file\n");
}
return 0;
}