Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1778953
  • 博文数量: 198
  • 博客积分: 4088
  • 博客等级: 上校
  • 技术积分: 2391
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-15 16:29
个人简介

游戏开发,系统架构; 博客迁移到:http://www.jianshu.com/u/3ac0504b3b8c

文章分类

全部博文(198)

文章存档

2017年(1)

2016年(12)

2015年(1)

2014年(3)

2013年(13)

2012年(18)

2011年(150)

分类: LINUX

2011-09-07 10:55:51

Linux的文件属性有六顶之多,可以用ls命令来查看,第一项是文件的访问权限,读写执行。第二项是文件个数,第三项是文件的拥有都,第四项表示文件大小,第五项是最后一次文件的修改时间,最后一项是文件名。在程序当中可以用系统调用函数stat来获取文件的各项属性\
#include
#include
#include
#include
#include
int main(int argc,char *argv[])
{
struct stat buf;
if(argc!=2)
printf("input the parameter error!\n");
if(stat(argv[1],&buf)==-1)
printf("get the stat is faild!\n");

printf("st_dev:%d\n",buf.st_dev);
printf("st_ino:%d\n",buf.st_ino);
printf("st_mode:%d\n",buf.st_mode);
printf("st_nlink:%d\n",buf.st_nlink);
printf("st_uid:%d\n",buf.st_uid);
printf("st_gid:%d\n",buf.st_gid);
printf("st_rdev:%d\n",buf.st_rdev);
printf("st_size:%d\n",buf.st_size);
printf("st_blksize:%d\n",buf.st_blksize);
printf("st_atime:%s\n",ctime(&buf.st_atime));
printf("st_mtime:%s\n",ctime(&buf.st_mtime));
printf("st_ctime:%s\n",ctime(&buf.st_ctime));

return 0;
}
要获取文件的属性其实有三个系统函数可以选择,用man 2 stat可以看到这三个函数:
int stat(const char *path, struct stat *buf);
int fstat(int fd, struct stat *buf);
int lstat(const char *path, struct stat *buf);
本程序用的是第一个函数。
首先程序包涵所需要的头文件。
main函数中定义了一个stat结构体的变量。在/usr/include/sys/stat.h里可以找到它的定义,用man 2 stat里也有说明。
struct stat {
dev_t st_dev;
ino_t st_ino;
mode_t st_mode;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
dev_t st_rdev;
off_t st_size;
blksize_t st_blksize;
blkcnt_t st_blocks;
time_t st_atime;
time_t st_mtime;
time_t st_ctime;
};
各项的意思也很简单,st_dew文件设备的编号,st_ino 为节点编号,st_mode为文件类型和存取权限。st_link为文件的硬连接数目。st_uid用户ID,st_rdev如果是设备文件,则为其编号,st_size文件大小。st_blksize为I/O缓冲的大小。st_blicks占用文件块的大小,后三项为文件的最后一次被访问时间,最近修改时间,最近更新时间。
代码首先判断用户输入的参数是否正确,在数据argv中argv[0]和argv[1]接受命令参数的输入。
然后用stat函数获得文件属性并用其来填充buf结构体。
最后输出结构体里的各成员变量。
在用gcc编译时会有警告产生,原因是printf输出的第一个参数的格式不正确,可以忽略。看下面的一次执行
root@ubuntu:/home/coding/myjc/myc# ./stat coding.c
st_dev:1792
st_ino:1161590
st_mode:100774
st_nlink:1
st_uid:0
st_gid:0
st_rdev:0
st_size:1652
st_blksize:4096
st_atime:Tue May 5 22:55:04 2009

st_mtime:Tue May 5 22:55:03 2009

st_ctime:Tue May 5 22:55:03 2009
时间精确到了秒,强!

转载地址:http://hi.baidu.com/_wang_wei/blog/item/34579b4e5467e303b3de052a.html
阅读(4498) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~