学习笔记
stat函数
获取文件属性,说白了就是从inode中获取
#include
#include
#include
int stat(const char *pathname, struct stat *statbuf);
第一参数:文件路径 传入参数
第二参数:struct stat *statbuf:传出参数,存储文件属性信息
返回值:
成功是0
失败是-1
重点是结构体
几乎就是ls -l出来的信息
struct stat {
dev_t st_dev; //使用的设备
ino_t st_ino; //inode 号
mode_t st_mode; //访问权限
nlink_t st_nlink; //硬链接数
uid_t st_uid; //UID
gid_t st_gid; //GID
dev_t st_rdev;
off_t st_size; //大小
blksize_t st_blksize;
blkcnt_t st_blocks; //占用几个扇区
struct timespec st_atim;
struct timespec st_mtim;
struct timespec st_ctim;
#define st_atime st_atim.tv_sec
#define st_mtime st_mtim.tv_sec
#define st_ctime st_ctim.tv_sec
};
获取文件大小的正规操作:st_size成员
查看下面的程序:
$cat mystat.c #include#include #include #include #include #include int main(int argc, char *argv[]) { struct stat sbuf; int ret = stat(argv[1],&sbuf); if( -1 == ret ) { perror("stat error"); exit(1); } printf("file size:%ldn",sbuf.st_size); return 0; }
$ls f.c makefile mystat mystat.c $./mystat ./f.c file size:500 $ls -l f.c -rwxr--r-- 1 ubuntu ubuntu 500 12月 24 00:00 f.c
作业:
st_mode 就是文件类型,使用这个成员来可以判断文件类型
if ((sb.st_mode & S_IFMT) == S_IFREG) {
}
S_ISREG(m) is it a regular file?
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.)



