码迷,mamicode.com
首页 > 系统相关 > 详细

Linux系统编程_3_文件属性

时间:2014-08-08 18:10:56      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:linux   io   

1.Linux中stat结构体包含了一个文件的各种属性。

struct stat {
    dev_t         st_dev;       //文件的设备编号
    ino_t         st_ino;       //节点
    mode_t        st_mode;      //文件的类型和存取的权限
    nlink_t       st_nlink;     //连到该文件的硬连接数目,刚建立的文件值为1
    uid_t         st_uid;       //用户ID
    gid_t         st_gid;       //组ID
    dev_t         st_rdev;      //(设备类型)若此文件为设备文件,则为其设备编号
    off_t         st_size;      //文件字节数(文件大小)
    unsigned long st_blksize;   //块大小(文件系统的I/O 缓冲区大小)
    unsigned long st_blocks;    //块数
    time_t        st_atime;     //最后一次访问时间
    time_t        st_mtime;     //最后一次修改时间
    time_t        st_ctime;     //最后一次改变时间(指属性)
};


2.Linux中文件的类型

一般有7种类型:

普通文件  目录文件   字符设备文件  块设备文件  链接文件  管道文件  Socket文件

利用lstat函数来显示不同文件类型,注意lstat与stat函数不同,stat函数不能检测出链接文件;

测试程序:

|  1 #include <stdio.h>
|  2 #include <stdlib.h>
|  3 #include <unistd.h>
|  4 #include <sys/stat.h>
|  5
|  6 int main(int argc, char **argv)
|  7 {
|  8     int i;
|  9     char *pInfo;
| 10     struct stat stBuf;
| 11
| 12     if(argc < 2)
| 13     {
| 14         printf("Usage:./test xxx xxx xxx\n");
| 15         exit(-1);
| 16     }
| 17
| 18     for(i=1; i<argc; i++)
| 19     {
| 20         printf("%s\n", argv[i]);
| 21         if(lstat(argv[i], &stBuf) < 0)
| 22         {
| 23             perror("Open File error");
| 24             continue;
| 25         }
| 26         if(S_ISREG(stBuf.st_mode))
| 27             pInfo = "Regular";
| 28         else if(S_ISDIR(stBuf.st_mode))
| 29             pInfo = "Directory";
| 30         else if(S_ISCHR(stBuf.st_mode))
| 31             pInfo = "Char special";
| 32         else if(S_ISBLK(stBuf.st_mode))
| 33             pInfo = "Block special";
| 34         else if(S_ISFIFO(stBuf.st_mode))
| 35             pInfo = "Fifo";
| 36         else if(S_ISLNK(stBuf.st_mode))
| 37             pInfo = "Link";
| 38         else if(S_ISSOCK(stBuf.st_mode))
| 39             pInfo = "Socket";
| 40         else
| 41             pInfo = "**Unknown Type**";
| 42
| 43         printf("%s file\n\n", pInfo);
| 44     }
| 45
| 46     return 0;
| 47 }

测试命令:./test test /home/ /dev/log /dev/tty /dev/sda /dev/scd0

测试结果:

test
Regular file


/home/
Directory file

/dev/log
Socket file

/dev/tty
Char special file

/dev/sda
Block special file

/dev/scd0
Link file




Linux系统编程_3_文件属性,布布扣,bubuko.com

Linux系统编程_3_文件属性

标签:linux   io   

原文地址:http://blog.csdn.net/scottly1/article/details/38441143

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!