第一个0表示8进制,后面17共四位 1 111 用来标识文件类型,那么S_IFMT用二进制表示就是1111后面加12个0,通过与与运算就把后面12位置为0而保留代表文件类型的四个bit,再把相与的结果与下面的S_IFSOCK到S_IFIFO进行对比来判断文件类型),进而判断文件类型。
S_ISDIR(m) directory?S_ISCHR(m) character device?S_ISBLK(m) block device?S_ISFIFO(m)FIFO(named pipe)?S_ISLNK(m) symbolic link? (Not in POSIX.1-1996.)S_ISSOCK(m) socket? (Not in POSIX.1-1996.) 带参宏的实现#defineS_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)#defineS_IS...
bit mask for the file type bit fields for example:printf("File type: ");switch (sb.st_mode & S_IFMT) { case S_IFBLK: printf("block device\n"); break;case S_IFCHR: printf("character device\n"); break;case S_IFDIR: printf("directory\n"); break;case...
e.g.st_mode & S_IFMT可以得到文件类型 如果看文件是否有哪个权限,st_mode&掩码&权限的掩码,然后看是否大于0 e.g.st_mode & S_IRWXU & S_IRUSR可以看文件所有者是否有读权限 文件类型(12-15 bit) 掩码:S_IFMT0170000 过滤 st_mode中除文件类型以外的信息 S_IFSOCK0140000 套接字 S_IFLNK0120000 ...
0041100 & 0170000 = 0040000(S_IFMT) (S_IFDIR) 通过结果对比可以得出这是一个目录文件。这是通过掩码的方式来判断文件类型。 另外一种判断文件类型的方法是使用它为我们提供的宏来判断,7种文件类型判断相关的宏如下所示,这里的m是指stat结构体中的st_mode。
判断文件类型,可以通过st.st_mode&S_IFMT然后与文件类型的宏定义比对得到;也可以直接用封装好的宏,例如S_ISREG(st.st_mode)判断。 判断文件权限,可以用st.st_mode直接与权限宏定义&操作,返回的true就是有权限。 localtime_r就可以查看访问的时间,传入对应的st的成员变量的tv_sec,读到自定义的tm结构体中然后...
S_IFMT宏是文件类型字段位掩码: S_IFMT 0170000 除了这样判断之外,我们还可以使用Linux系统封装好的宏来进行判断,如下所示(m是st_mode变量): S_ISREG(m) #判断是不是普通文件,如果是返回true,否则返回false S_ISDIR(m) #判断是不是目录,如果是返回true,否则返回false S_ISCHR(m) #判断是不是字符设备文件...
S_IFIFO:实体是一个IFIFO(命令管道) S_IFREG:实体是一个常规文件 S_IFLNK:实体是一个符号链接 其他的一些模式标记如下: S_ISUID:实体在执行权限上设置了UID S_ISGID:实体在执行权限上设置了GID 用来解释st_mode的屏蔽(mask)如下: S_IFMT:文件类型 ...
switch(buf.st_mode & S_IFMT)//判断文件类型 { case S_IFSOCK:printf("s ");break;//套接字 case S_IFLNK: printf("l ");break;//链接 case S_IFREG: printf("- ");break;//普通文件 case S_IFBLK: printf("b ");break;//块设备文件 ...
文件类型:st_mode & S_IFMT后与各个宏比较 文件权限:st_mode & S_IRUSR(以user读权限为例),直接看和宏按位与后的真假,若为真就有权限,假则无权限 //获取文件类型和文件权限 char perms[11]={0}; //用于保存文件类型和文件权限的字符串 ...