Linux编程获取文件属性

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
时间精确到了秒,强!

你可能感兴趣的:(linux编程)