stat函数使用

33 篇文章 1 订阅

stat是非常常用的一个函数,可以获取文件的一些属性,或判断文件的类型。


下面直接取自man 2 stat中的示例代码:

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

int
main(int argc, char *argv[])
{
   struct stat sb;

   if (argc != 2) {
       fprintf(stderr, "Usage: %s <pathname>\n", argv[0]);
       exit(EXIT_FAILURE);
   }

   if (stat(argv[1], &sb) == -1) {
       perror("stat");
       exit(EXIT_FAILURE);
   }

   printf("File type:                ");

   switch (sb.st_mode & S_IFMT) {
   case S_IFBLK:  printf("block device\n");            break;
   case S_IFCHR:  printf("character device\n");        break;
   case S_IFDIR:  printf("directory\n");               break;
   case S_IFIFO:  printf("FIFO/pipe\n");               break;
   case S_IFLNK:  printf("symlink\n");                 break;
   case S_IFREG:  printf("regular file\n");            break;
   case S_IFSOCK: printf("socket\n");                  break;
   default:       printf("unknown?\n");                break;
   }

   printf("I-node number:            %ld\n", (long) sb.st_ino);

   printf("Mode:                     %lo (octal)\n",
           (unsigned long) sb.st_mode);

   printf("Link count:               %ld\n", (long) sb.st_nlink);
   printf("Ownership:                UID=%ld   GID=%ld\n",
           (long) sb.st_uid, (long) sb.st_gid);

   printf("Preferred I/O block size: %ld bytes\n",
           (long) sb.st_blksize);
   printf("File size:                %lld bytes\n",
           (long long) sb.st_size);
   printf("Blocks allocated:         %lld\n",
           (long long) sb.st_blocks);

   printf("Last status change:       %s", ctime(&sb.st_ctime));
   printf("Last file access:         %s", ctime(&sb.st_atime));
   printf("Last file modification:   %s", ctime(&sb.st_mtime));

   exit(EXIT_SUCCESS);
}


运行结果:

flying-bird@flyingbird:~/examples/cpp/stat$ ./a.out 
Usage: ./a.out <pathname>
flying-bird@flyingbird:~/examples/cpp/stat$ ./a.out .
File type:                directory
I-node number:            1843188
Mode:                     40775 (octal)
Link count:               2
Ownership:                UID=1000   GID=1000
Preferred I/O block size: 4096 bytes
File size:                4096 bytes
Blocks allocated:         8
Last status change:       Tue May 27 19:44:20 2014
Last file access:         Tue May 27 19:44:21 2014
Last file modification:   Tue May 27 19:44:20 2014
flying-bird@flyingbird:~/examples/cpp/stat$ ./a.out ./a.out 
File type:                regular file
I-node number:            1843191
Mode:                     100775 (octal)
Link count:               1
Ownership:                UID=1000   GID=1000
Preferred I/O block size: 4096 bytes
File size:                7463 bytes
Blocks allocated:         16
Last status change:       Tue May 27 19:44:20 2014
Last file access:         Tue May 27 19:44:22 2014
Last file modification:   Tue May 27 19:44:20 2014
flying-bird@flyingbird:~/examples/cpp/stat$ ll /dev/sd
sda   sda1  sda2  sda3  sda5  sda6  sda7  sdb   sdb1  sdb2  sdb5  sdb6  sdb7  sdc   sdd   sde   sdf   
flying-bird@flyingbird:~/examples/cpp/stat$ ./a.out /dev/sda
File type:                block device
I-node number:            6645
Mode:                     60660 (octal)
Link count:               1
Ownership:                UID=0   GID=6
Preferred I/O block size: 4096 bytes
File size:                0 bytes
Blocks allocated:         0
Last status change:       Tue May 27 18:41:12 2014
Last file access:         Tue May 27 18:41:13 2014
Last file modification:   Tue May 27 18:41:12 2014
flying-bird@flyingbird:~/examples/cpp/stat$ ./a.out /dev/sda5
File type:                block device
I-node number:            461
Mode:                     60660 (octal)
Link count:               1
Ownership:                UID=0   GID=6
Preferred I/O block size: 4096 bytes
File size:                0 bytes
Blocks allocated:         0
Last status change:       Tue May 27 18:41:13 2014
Last file access:         Tue May 27 18:55:36 2014
Last file modification:   Tue May 27 18:41:13 2014
flying-bird@flyingbird:~/examples/cpp/stat$ 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值