仿写ls -li 获取某一个路径下的所有文件的文件属性(不用管文件创建者和属组,也不要隐藏文件)

本文主要是介绍仿写ls -li 获取某一个路径下的所有文件的文件属性(不用管文件创建者和属组,也不要隐藏文件),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1》stat: 查看一个文件的属性

#include <sys/types.h>

#include <sys/stat.h>

#include <unistd.h>

int stat(const char *pathname, struct stat *statbuf);

形参:pathname  文件名

statbuf:获取到的文件属性存放的位置

返回值:成功返回0,失败返回-1

struct stat {

dev_t  st_dev; /*如果是设备,返回文件使用的设备号,否则为 0*/

ino_t   st_ino; /* 索引节点号 (i节点)*/

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; /*  系统每次按块Io操作时块的大小(一般是512或1024)*/

blkcnt_t   st_blocks; /*块的索引号 */

time_t    st_atime; /* 最后访问时间,如read*/

time_t    st_mtime; /* 最后修改时间*/

time_t    st_ctime; /* 创建时间 */

};

st_mode  & 下面的宏  !=0  说明有该权限

2》lstat:

int lstat(const char *pathname, struct stat *statbuf);

形参:pathname  文件名

statbuf:获取到的文件属性存放的位置

如果当前文件是链接文件,stat获取的是链接文件原文件的属性;

如果当前文件是链接文件,lstat获取的是链接文件(l),自己的属性;

#include "stdio.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include "string.h"
#include <dirent.h>
#include "time.h"
char Fun(mode_t ch);
char *Func(mode_t ch);
int main(int argc,char *argv[])
{struct dirent *q;struct stat p;char path[128] = {0};time_t t = time(NULL);struct tm *w = localtime(&t);if(argc < 2){strcpy(path,".");}else{strcpy(path,argv[1]);}DIR *dir = opendir(path);if(dir == NULL){perror("opendir");return -1;}while(q = readdir(dir)){if(q->d_name[0] == '.')continue;printf("%ld ",q->d_ino);int a = lstat(q->d_name,&p);if(a == -1){perror("lstat");return -1;}printf("%c%s ",Fun(p.st_mode),Func(p.st_mode));printf("%ld %ld ",p.st_nlink,p.st_size);printf("%d月 %d ",w->tm_mon+1,w->tm_mday);printf("%d:%d ",w->tm_hour,w->tm_min);printf("%s\n",q->d_name);}// printf("\n");closedir(dir);return 0;
}char Fun(mode_t ch)
{char a = 0;switch (ch & S_IFMT) {case S_IFBLK: a = 'b';break;case S_IFCHR: a = 'c';break;case S_IFDIR: a = 'd'; break;case S_IFIFO: a = 'p';break;case S_IFLNK: a = 'l';break;case S_IFREG: a = '-';break;case S_IFSOCK:a = 's';break;}return a;
}char *Func(mode_t ch)
{static char buf[10] = {0};strcpy(buf,"---------");if(ch & S_IRUSR){buf[0] = 'r';}if(ch & S_IWUSR){buf[1] = 'w';}if(ch & S_IXUSR){buf[2] = 'x';}if(ch & S_IRGRP){buf[3] = 'r';}if(ch & S_IWGRP){buf[4] = 'w';}if(ch & S_IXGRP){buf[5] = 'x';}if(ch & S_IROTH){buf[6] = 'r';}if(ch & S_IWOTH){buf[7] = 'w';}if(ch & S_IXOTH){buf[8] = 'x';}return buf;
}

这篇关于仿写ls -li 获取某一个路径下的所有文件的文件属性(不用管文件创建者和属组,也不要隐藏文件)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/653210

相关文章

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下: