day31-文件属性(2022.3.2)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: day31-文件属性(2022.3.2)

demo1获取文件属性


#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
// ./demo 1.txt
int main(int argc, const char **argv)
{
  if(argc != 2)
  {
    printf("Input Error!\n");
    return -1;
  }
  struct stat s_buf;
  if(stat(argv[1], &s_buf))
  {
    perror("stat failed");
    return -2;
  }
  printf("st_dev: %lu\n", s_buf.st_dev);    // 设备号
  printf("st_ino: %lu\n", s_buf.st_ino);    // 索引号
  printf("st_mode: %u\n", s_buf.st_mode);   // 文件权限-类型(需解析)
  printf("st_nlink: %lu\n", s_buf.st_nlink);  // 硬链接数
  printf("st_uid: %u\n", s_buf.st_uid);   // 用户ID
  printf("st_gid: %u\n", s_buf.st_gid);   // 组ID
  printf("st_rdev: %lu\n", s_buf.st_rdev);  // 特殊设备号(普通文件无效,设备文件有效)
  printf("st_size: %ld\n", s_buf.st_size);  // 文件大小
  printf("st_blksize: %ld\n", s_buf.st_blksize);  // IO操作页面字节数
  printf("st_blocks: %ld\n", s_buf.st_blocks);  // 占用存储块
    // 文件的访问-修改-状态修改时间(需解析)
  printf("st_atim: %ld\n", s_buf.st_atim.tv_sec);
  printf("st_mtim: %ld\n", s_buf.st_mtim.tv_sec);
  printf("st_ctim: %ld\n", s_buf.st_ctim.tv_sec);
  return 0;
}


demo2ls-lc查看文件详细信息.c


#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
// ./my_ls 1.txt
int main(int argc, const char **argv)
{
  if(argc != 2)
  {
    printf("Input Error!\n");
    return -1;
  }
  struct stat s_buf;
  if(stat(argv[1], &s_buf))
  {
    perror("stat failed");
    return -2;
  }
  // 1.文件类型(需对st_mode进行解析)
  switch(s_buf.st_mode&S_IFMT)
  {
    case S_IFSOCK: printf("s"); break;
    case S_IFLNK:  printf("l"); break;
    case S_IFREG:  printf("-"); break;
    case S_IFBLK:  printf("b"); break;
    case S_IFDIR:  printf("d"); break;
    case S_IFCHR:  printf("c"); break;
    case S_IFIFO:  printf("p"); break;
  }
  // 2.文件权限(文件所有者、同组用户、其他用户)(同1)
    // 文件所有者
  // if((s_buf.st_mode&S_IRWXU)&S_IRUSR)
  //  printf("r");
  // else
  //  printf("-");
  // if((s_buf.st_mode&S_IRWXU)&S_IWUSR)
  //  printf("w");
  // else
  //  printf("-");
  // if((s_buf.st_mode&S_IRWXU)&S_IXUSR)
  //  printf("x");
  // else
  //  printf("-");
  //----------------------------------------------
  char mod[10]; 
  bzero(mod, 10); 
  char rwx[3] = {'r', 'w', 'x'};
   for(int i=0; i<9; i++) mod[i] = s_buf.st_mode&(0400>>i) ? rwx[i%3] : '-';
   printf("文件权限:%s\n", mod);
  //....(完成后,思考一下是否有更简短一些的代码呢?)
  printf(" ");
  // 3.硬链接数
  printf("%lu ", s_buf.st_nlink);
  // 4.所有者用户名(需对st_uid进行解析)
  printf("- ");
    // 使用 getpwuid() 函数实现
  // 5.组名(需对st_gid进行解析)
  printf("- ");
    // 使用 getgrgid() 函数实现
  // 6.文件大小
  printf("%ld ", s_buf.st_size);
  // 7.修改时间 (需对st_mtim进行解析)
  printf("- ");
    // 使用 ctime() 函数实现
  // 8.文件名
  printf("%s\n", argv[1]);
  return 0;
}
相关文章
|
6月前
文件查找和文件权限
文件查找和文件权限
50 0
|
存储 Linux Go
【Linux】文件 --- 文件属性 | 修改文件属性与权限
【Linux】文件 --- 文件属性 | 修改文件属性与权限
215 0
|
6月前
|
Linux Windows
文件属性和路径
文件属性和路径
|
存储 Linux
【Linux命令200例】lsattr用于查看文件或目录的属性
lsattr 是 Linux 系统中的一个命令,用于查看文件或目录的属性。它可以列出文件或目录的扩展属性(Extended attributes),以及是否设置了一些特殊属性,如不可删除、不可修改等。本文将详细介绍 `lsattr` 命令的用法,并提供几个实际的例子。
503 0
查找文件夹内所有文件
查找文件夹内所有文件
87 0
|
Linux
文件属主
文件属主
103 0
|
存储 Linux Windows
符号链接文件
符号链接文件
204 0
|
开发工具 知识图谱
ls命令 & 文件属性
一、文件属性 1、文件类型   -:普通文件(f)   d:目录文件   b:块设备文件(block)   c:字符设备文件(character)   l:符号链接文件(symbolic link file)   p:命令管道文件(pipe)   s:套接字文件(socket...
1275 0