文章目
目录
文章目录
前言
一、stat函数
二、stat结构体
三、文件类型
四、代码
1.对每个命令行参数打印文件类型
前言
本章主要介绍文件类型和struct stat结构体
提示:以下是本篇文章正文内容,下面案例可供参考
一、stat函数
#include <sys/stat.h>
int stat(const char *restrict pathname,struct stat *restrict buf);
int fstat(int fd,struct stat *buf);
int lstat(const char *restrict pathname,struct stat *restrict buf);
int fstatat(int fd, const char *restrict pathname,struct stat * restrict buf,int flag);
二、stat结构体
struct stat{
mode_t st_mode;
ino_t st_ino;
dev_t st_dev;
dev_t st_rdev;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
off_t st_size;
struct timespec st_atime;
struct timespec st_mtime;
struct timespec st_ctime;
blksize_t st_blksize;
blkcnt_t st_blocks;
};
三、文件类型
(1)普通文件 (2)目录文件 (3)块特殊文件 (4)字符特殊文件 (5)FIFO (6)套接字 (7)符号链表
文件类型包括在stat结构体st_mode成员中,通过下面的宏判断文件的类型
S_ISREG() 普通文件
S_ISDIR() 目录文件
S_ISCHR() 字符文件
S_ISBLK() 块文件
S_ISFIFO() 管道
S_ISLNK() 字符链接
S_ISSOCK() 套接字
四、代码
1.对每个命令行参数打印文件类型
代码如下(示例):
void unix_4_3_stat(int num, char *name[])
{
int i;
struct stat buf;
char *ptr;
for(i=1;i<num;i++){
printf("%s: ",name[i]);
if(lstat(name[i],&buf) < 0){
err_ret("lstat error");
continue;
}
if(S_ISREG(buf.st_mode))
ptr = "regular";
else if(S_ISDIR(buf.st_mode))
ptr = "directory";
else if(S_ISCHR(buf.st_mode))
ptr = "charactory special";
else if(S_ISBLK(buf.st_mode))
ptr = "block special";
else if(S_ISFIFO(buf.st_mode))
ptr = "fifo";
else if(S_ISLNK(buf.st_mode))
ptr = "symbolic link";
else if(S_ISSOCK(buf.st_mode))
ptr = "socket";
else
ptr = "** unknow mode **";
printf("%s\n",ptr);
}
exit(0);
}
#define UNIX_4_3_STAT
int main(int argc, char *argv[])
{
#ifdef UNIX_4_3_STAT
unix_4_3_stat(argc,argv);
#endif
printf("MAIN END\n");
return 0;
}
总结
本章主要介绍文件类型的判断方式并提供参考例程。