Linux下文件类型和属性管理(3)

文件的属性管理

1.读取文件属性

使用stat函数,如下示例:

Linux 程序设计学习笔记----Linux下文件类型和属性管理

stat的结构体包含的如下:主要见stat.h头文件,具体该文件的解读参见:  与  

The structurestatcontains at least the following members:

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;    //最后一次改变时间(指属性)
};

同样具有查询功能的函数有lstat,参见

正在打开文件的查询函数:fstat,参见

同样上文中的修改命令中,对于已经打开的文件,使用fchmod的类型,加f前缀。

下面是一个使用lstat函数查询文件属性的示例程序,可以根据文件的类型打印对应的提示信息。

代码如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
 int i;
 struct stat buf;
 char *ptr;
 for (i = 1; i < argc; i++)
 {
  printf("%s: ", argv[i]);
  if (lstat(argv[i], &buf) < 0)  // obtains information about the file
  {
   perror("lstat");
   continue;
  }
  if(S_ISREG(buf.st_mode))
   ptr = "regular file";                        // regular file
  else if (S_ISDIR(buf.st_mode)) 
   ptr = "directory file";                      // directory file
  else if (S_ISCHR(buf.st_mode)) 
   ptr = "character special file";              // character_special file
  else if (S_ISBLK(buf.st_mode)) 
   ptr = "block special file";                  // block_special file
  else if (S_ISFIFO(buf.st_mode))
   ptr = "fifo file";                          // pip file

#ifdef S_ISLNK
  else if (S_ISLNK(buf.st_mode)) 
   ptr = "symbolic link";                      // link file
#endif
#ifdef S_ISSOCK
  else if (S_ISSOCK(buf.st_mode)) 
   ptr = "socket";                              // socket file
#endif
  else 
   ptr = "** unknown mode **";                // unknown file

printf("%s\n", ptr);
 }
 return 0;
}

Linux 程序设计学习笔记----Linux下文件类型和属性管理

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/87c074c6fbbaa3526c6e1b351d26d40a.html