赞
踩
头文件:
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>
函数原型:
- int stat(const char* pathname,struct stat* buf);
- 参数1:文件路径名
- 参数2:struct stat类型的结构体
函数返回值:
成功返回0,失败返回-1
struct stat结构体详解:
struct stat中的st_mode做了如下定义:
- S_IFMT 0170000 文件类型的位遮罩
- S_IFSOCK 0140000 套接字
- S_IFLNK 0120000 符号连接
- S_IFREG 0100000 一般文件
- S_IFBLK 0060000 区块装置
- S_IFDIR 0040000 目录
- S_IFCHR 0020000 字符装置
- S_IFIFO 0010000 先进先出
-
- S_ISUID 04000 文件的(set user-id on execution)位
- S_ISGID 02000 文件的(set group-id on execution)位
- S_ISVTX 01000 文件的sticky位
-
- S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限
- S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限
- S_IXUSR(S_IEXEC) 00100 文件所有者具可执行权限
-
- S_IRGRP 00040 用户组具可读取权限
- S_IWGRP 00020 用户组具可写入权限
- S_IXGRP 00010 用户组具可执行权限
-
- S_IROTH 00004 其他用户具可读取权限
- S_IWOTH 00002 其他用户具可写入权限
- S_IXOTH 00001 其他用户具可执行权限
-
- 上述的文件类型在POSIX中定义了检查这些类型的宏定义:
- S_ISLNK (st_mode) 判断是否为符号连接
- S_ISREG (st_mode) 是否为一般文件
- S_ISDIR (st_mode) 是否为目录
- S_ISCHR (st_mode) 是否为字符装置文件
- S_ISBLK (s3e) 是否为先进先出
- S_ISSOCK (st_mode) 是否为socket
- 若一目录具有sticky位(S_ISVTX),则表示在此目录下的文件只能被该文件所有者、此目录所有者或root来删除或改名,在linux中,最典型的就是这个/tmp目录啦。
-
使用stat函数判断是否为目录:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。