linux stat 函数详解
2013-06-10 10:31
99 查看
S_ISREG等几个常见的宏
stat函数讲解:表头文件: #include <sys/stat.h>#include <unistd.h>
定义函数: int stat(const char *file_name, struct stat *buf);
函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中
返回值: 执行成功则返回0,失败返回-1,错误代码存于errno
错误代码:
ENOENT 参数file_name指定的文件不存在
ENOTDIR 路径中的目录存在但却非真正的目录
ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接
EFAULT 参数buf为无效指针,指向无法存在的内存空间
EACCESS 存取文件时被拒绝
ENOMEM 核心内存不足
ENAMETOOLONG 参数file_name的路径名称太长
int stat(const char *file_name,struct stat *buf);
int fstat(int filedes,struct stat *buf);
stat 结构定义于:/usr/include/sys/stat.h 文件中
struct stat finfo;
stat( sFileName, &finfo );
int size = finfo. st_size;
struct stat {
mode_t st_mode; //文件对应的模式,文件,目录等
ino_t st_ino; //i-node节点号
dev_t st_dev; //设备号码
dev_t st_rdev; //特殊设备号码
nlink_t st_nlink; //文件的连接数
uid_t st_uid; //文件所有者
gid_t st_gid; //文件所有者对应的组
off_t st_size; //普通文件,对应的文件字节数
time_t st_atime; //文件最后被访问的时间
time_t st_mtime; //文件内容最后被修改的时间
time_t st_ctime; //文件状态(属性)改变时间
blksize_t st_blksize; //文件内容对应的块大小
blkcnt_t st_blocks; //文件内容对应的块数量
};
stat用来判断没有打开的文件,而fstat用来判断打开的文件.我们使用最多的属性是st_mode.通过着属性我们可以判断给定的文件是一个普通文件还是一个目录,连接等等.可以使用下面几个宏来判断.
S_ISLNK(st_mode):是否是一个连接.S_ISREG是否是一个常规文件.S_ISDIR是否是一个目录S_ISCHR是否是一个字符设备.S_ISBLK是否是一个块设备S_ISFIFO是否是一个FIFO文件.S_ISSOCK是否是一个SOCKET文件.
用法://定义一个结构体
struct stat m;//用户输入的文件名(用来判断是否是目录)。
char *filename;int a;
int n = stat(filename,&m);
a = S_ISDIR(m.st_mode);如果a为真,则说明是目录,否则不是。分享到:
相关文章推荐
- linux stat函数详解
- jQuery.extend 函数详解
- 0x5f3759df Quake-III代码里的高效浮点开方函数详解
- jQuery.extend 函数详解
- python常用函数详解
- CreateProcess函数详解及示例
- php日期时间 date()与time()函数详解
- php中magic_quotes_gpc函数详解
- DoDataExchange函数详解
- PHP中的Date()函数详解
- Linux 中可重入函数与不可重入函数详解
- fscanf()函数详解
- VC++的AssertValid和Dump函数的应用详解
- Python的hasattr() getattr() setattr() 函数使用方法详解--转载
- linux网络编程之shutdown() 与 close()函数详解
- Windows API函数大全---附:windows运行命令详解
- js正则表达式常用函数详解
- 详解C语言中的fopen()函数和fdopen()函数
- Linux系统调用--semctl函数详解
- sscanf()函数详解(c语言)