Linux 简单实现 ls -l 命令

用c语言实现Linux命令ls操作 主要的流程是解析输入和调用相关的函数获得文件详细信息。 能够实现的命令格式有:ls –l (-d –R –a –I –al -ai) [filename1]([filename2] ……)。 演示效果如图所示: 代码如下: #include #include #include #include #include #include #include #inclu 阅读详情
ls -l命令

系统效果:
这里写图片描述

列出文件属性,权限,用户等信息

简单实现代码:

#include<stdio.h>
#include<grp.h>
#include<time.h>
#include<pwd.h>
#include<dirent.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
struct stat sbuf;
struct stat sbuf_dst;
struct stat sbuf_reg;
void print_information(char* file);

void open_dir(char* dir)
{
    DIR *pdir = opendir(dir);
    struct dirent *pd = NULL;
    struct stat sbuf_dst;
    lstat(dir, &sbuf_dst);
    if(pdir == NULL)
    {
        fprintf(stderr, "open dir error\n");
        exit(1);
    }
    else
    {
        while((pd = readdir(pdir)) != NULL)
        {
            if(pd->d_name[0] == '.') continue;
            int total = 0;
            int len = strlen(dir)+2+strlen(pd->d_name);
            char* src_name = (char*)malloc(len);
            memset(src_name, 0x00, len);
            sprintf(src_name, "%s/%s", dir, pd->d_name);
            print_information(src_name);
        }
        closedir(pdir);
    }
}

void file_type(mode_t md)//显示文件类型函数
{

    char mode[11] = "?---------";
    //文件属性
    if((md & S_IFMT) == S_IFREG) mode[0] = '-';
    if((md & S_IFMT) == S_IFDIR) mode[0] = 'd';
    if((md & S_IFMT) == S_IFIFO) mode[0] = 'p';
    if((md & S_IFMT) == S_IFSOCK) mode[0] = 's';
    if((md & S_IFMT) == S_IFBLK) mode[0] = 'b';
    if((md & S_IFMT) == S_IFCHR) mode[0] = 'c';
    if((md & S_IFMT) == S_IFLNK) mode[0] = 'l';
    //文件权限
    if((md & S_IRUSR)) mode[1] = 'r';
    if((md & S_IWUSR)) mode[2] = 'w';
    if((md & S_IXUSR)) mode[3] = 'x';
    if((md & S_IRGRP)) mode[4] = 'r';
    if((md & S_IWGRP)) mode[5] = 'w';
    if((md & S_IXGRP)) mode[6] = 'x';
    if((md & S_IROTH)) mode[7] = 'r';
    if((md & S_IWOTH)) mode[8] = 'w';
    if((md & S_IXOTH)) mode[9] = 'x';

    printf("%s. ", mode);
}

void print_information(char* file)
{
    struct stat sbuf_reg;
    lstat(file, &sbuf_reg);

    //打印文件属性 权限信息
    file_type(sbuf_reg.st_mode);

    //硬链接个数
    printf("%d ",sbuf_reg.st_nlink);

    //文件拥有者;所在组
    uid_t my_uid;
    gid_t my_gid;
    struct passwd *myname;
    struct group *mygrp;
    myname = getpwuid(getuid());
    mygrp = getgrgid(getgid());
    printf("%2s ", myname->pw_name);
    printf("%2s ", mygrp->gr_name);

    //文件大小
    printf("%d ", sbuf_reg.st_size);

    //文件更新时间
    struct tm *block;
    block = localtime(&sbuf_reg.st_mtime);
    printf("%4d-%02d-%02d %02d:%02d ", 
        block->tm_year+1900, block->tm_mon+1, block->tm_mday,
        block->tm_hour, block->tm_min);

    //文件名
    printf("%s ",file);
    char buf[256] = {};
    if(S_ISLNK(sbuf_reg.st_mode))
    {
        printf("-> ");
        readlink(file, buf, 256);
        printf("%s", &buf);
    }
    printf("\n");
}

int main(int argc, char* argv[])
{
    lstat(argv[1], &sbuf);
    if(argc != 2)
    {
        fprintf(stderr, "usage: %s filename\n", argv[0]);
        exit(1);
    }

    if(S_ISDIR(sbuf.st_mode))
    {
        printf("总用量 %d\n", sbuf.st_blocks);
        open_dir(argv[1]);
    }

    else 
    {
        printf("总用量 %d\n", sbuf.st_blocks);
        print_information(argv[1]);
    }
}


效果:
这里写图片描述
总用量显示与系统不一致,没搞懂总用量是什么,网上说是块文件的个数,一块是1024,就是1k,但是文件大小除以1024也不对,不知道怎么获取总用量,希望知道的大神赐教。

Linux系统编程之——实现ls-l命令 功能描述: 仿写ls -l的功能(编写myls_l程序),参数通过命令行传入: 1、获取当前工作目录路径并对该目录实现遍历。 2、仿ls -l以列表形式出当前工作目录下的所有文件(包括子目录) 需显示的文件属性。 知识要点 ✓ Linux目录操作方法 – 打开目录、关闭目录 ✓ 读取目录文件 ✓ Linux文件属性获取 ✓ 文件属性解析相关的重要数据结构、函数、宏和文件掩码 源代码 /... 阅读详情

相关推荐

c/c++实现linux系统中ls,ls -l命令

linux环境c/c++实现ls,ls -l 仿写ls -l的功能(编写myls程序) ,参数通过命令行传入: 1、获取当前工作目录路径并对该目录实现遍历 2、仿ls -l以列表形式出当前工作目录下的所有文件(包括子目录) 需显示的文件属性有: 文件类型 权限 硬链接数 所有者用户名 所有者所在组用户名 文件大小 最后修改时间 #include <iostream> #include ...

qq_43650979的博客 2575

C语言实现Linux ls命令

C 语言实现 Linux ls 命令 ls 常用参数: -l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;-a:显示所有档案及目录;-r:以文件名反序排列并输出目录内容列表;-t:用文件和目录的更改时间排序;-R:递归处理,将指定目录下的所有文件及子目录一并处理;-r:以文件名反序排列并输出目录内...

git1314的博客 3151

自己实现linux下ls命令的代码

使用c语言实现linux下的ls命令,功能齐全,代码精简,适合初学者进行学习与研究

Linux上简单实现的 ls命令

文件权限:首位分为“-:文件”,“d:目录”,“l:软链接”,剩下其余9位每三位为一个整体代表所属用户权限、所属组权限、其他用户权限(-:无权限,r:读权限,w:写权限,x:执行权限)ls 命令是Linux下最常用的指令之一,为英文单词 list 的缩写,功能是列出指定目录下的内容及其相关属性信息。如下是ls功能的实现代码(自己代码尚未未完成,本代码为转载原文连接板在末尾。以下命令是在Linux系统上试验操作的。

weixin_47847781的博客 725

简单的linux下ls命令的实现

a version of ls1.c that sorts the list of items. It supports the -r option to sort in descending order. This version presents the list in a single column, but the code to display multiple columns is included.

告别连接难题:Windows 11下Multisim主数据库稳定运行终极配置指南

本文详细解析了Windows 11下Multisim 14.0主数据库连接失败的三大根源,并提供了四步终极解决方案,包括系统环境优化、软件权限配置、注册表修复和网络验证绕过技巧。通过实测数据对比,本方案显著提升了启动速度和稳定性,解决了电子仿真中的常见连接问题。

weixin_33738555的博客 432

linux ls -l详细讲解 文件权限

linux 学习 ls -l命令 文件权限

weixin_57663206的博客 5137

告别迷茫!用ETAS RTA-OS配置你的第一个AUTOSAR OS任务(含VRTA虚拟ECU实战)

本文详细介绍了如何使用ETAS RTA-OS工具链在VRTA虚拟ECU上配置和运行第一个AUTOSAR OS任务。通过从XML配置到任务调度的全流程实战,帮助开发者快速掌握嵌入式操作系统开发的核心步骤,特别适合刚接触AUTOSAR的开发者快速上手。

weixin_42533622的博客 418

linux中的ls和ll指令

使用指令alias有: alias ll='ls -l --color=auto' 可以看到ll是ls -l指令的一个别名或者说快捷方式,当然可以使用指令:unalias ll 删除该指令,也可以使用alias ll='ls -l '添加该指令。ll:以长列表格式显示当前文件或目录信息,包括:属性 权限 文件个数 所有者 所属组 文件大小(byte) 最后一次修改时间 文件名。ls:显示当前目录下文件或目录,只显示名称,指令全称:list directory contents。

shuaiqidexiaojiejie的博客 1928

攻克TypeError: Cannot read properties of undefined (reading ‘NormalModule‘)的四种实战策略

本文详细解析了`TypeError: Cannot read properties of undefined (reading 'NormalModule')`错误的四种实战解决策略。从版本一致性检查、包管理器优化到依赖替换和构建环境配置,帮助开发者快速定位和解决Webpack构建过程中的常见问题,提升开发效率。

weixin_42523670的博客 243

实战指南:从零搭建ROS2 + Cartographer 2D激光SLAM系统

本文详细介绍了如何从零开始搭建ROS2与Cartographer结合的2D激光SLAM系统,涵盖环境准备、激光雷达驱动配置、Cartographer安装与参数调优等关键步骤。通过实战案例和常见问题解决方案,帮助开发者快速掌握激光雷达建图技术,提升机器人自主导航能力。

weixin_29062255的博客 402

linux中ls -l命令输出信息含义

linux中ls -l命令输出信息含义 如上图所示,用ls -l命令查看当前目录下的文件和目录会显示对应的详细信息,以下是对这些信息的解读: 01、第一个信息含义 # 信息含义:文件类型和权限 # 该信息是由一个长度为10的字符串所表示的 # 例如: -rw-rw-r--或drwxr-xr-x # 字符串含义: 第一个字符含义:表示文件类型 紧接着三个字符:表示拥有者权限 紧接着三个字符:表示所属用户组权限 最后的三个字符:表示其他用户权限 # 第一个字符参数种类及含义: 'd' 表示该文件类型为

☜lgl☞ 3782

从SPI到JTAG:玩转FT2232H的MPSSE多协议切换指南(附配置代码)

本文详细介绍了如何利用FT2232H芯片的MPSSE技术实现SPI与JTAG协议的无缝切换,提供配置代码和调试技巧。通过解析MPSSE引擎架构和硬件特性,帮助开发者灵活应对多种串行协议需求,提升嵌入式开发效率。特别适合FPGA调试和物联网设备开发场景。

sun99的博客 254

linux编写程序实现ls -l命令,Linux系统编程_1_目录读取实现简单ls命令

闲来无事,随便写写,实现简单的ls命令:| 1 #include | 2 #include | 3 #include | 4 #include | 5| 6 int main(int argc, char **argv)| 7 {| 8 DIR *pDir;| 9 struct dirent *stDir;| 10 int flag = 0;| 11| 1...

weixin_33542634的博客 452

微信小程序 - 详解苹果ios手机请求不到数据访问不了接口,但安卓却可以正常访问。wx.request苹果手机IOS请求失败、安卓可以请求成功(微信小程序上线后苹果手机不能访问接口,网络请求失败排查)

微信小程序上线后,苹果手机请求不到数据,安卓可以,微信小程序,安卓可以调接口,苹果调不了的解决方案,微信小程序:IOS访问不了接口,安卓可以正常访问,微信小程序ios版本连接不了服务器,小程序Android可以请求,ios请求失败wx.request,成功上线的小程序,安卓机可以正常访问使用,苹果微信小程序不执行请求,苹果系统无法加载数据,微信小程序 iOS 网络失败,微信小程序接口请求在ios端报错,苹果手机真机调试微信小程序出现网络请求失败,微信小程序 安卓正常 ios调接口显示网络请求失败,微信小程序

🏆 前端领域优质创作者 4361

第95章 安全工程师:Shell 脚本实现安全扫描、漏洞检测、日志审计

随着网络安全威胁日益复杂,传统的手动安全管理已无法满足现代企业的安全需求。Shell 脚本为安全工程师提供了强大的自动化能力,能够实现 7×24 小时的安全监控、快速漏洞扫描、智能日志分析和实时威胁响应。本章将系统介绍如何使用 Shell 脚本构建完整的安全防护体系,从基线检查到实时监控,帮助你打造自动化的安全运维能力。

猪猪侠 90

Linux&C编程之Linux系统命令“ls -l”的简单实现

一、基础知识:1、获取文件详细信息的函数:(1)、获取文件信息的函数:#include<sys/stat.h> int stat(const char * path,struct stat * buf);/*将path参数(文件或目录)的文件信息写到buf中,buf为传出参数*/(2)、文件信息结构体:/*用不到的成员被注释掉,只需了解需要的成员即可*/ struct stat{ //dev

Apollon_krj的博客 9353

R语言 Chow Test

Chow 测试用于测试不同数据集上的两个不同回归模型中的系数是否相等。 该测试通常用于计量经济学领域,使用时间序列数据来确定数据在某个时间点是否存在结构性中断。 本教程提供了如何在 R 中执行 Chow 测试的分步示例 首先,我们将创建一些假数据: #create data data <- data.frame(x = c(1, 1, 2, 3, 4, 4, 5, 5, 6, 7, 7, 8, 8, 9, 10, 10, 11, 12, 12, 13,

Mrrunsen的博客 1946

【学习笔记】linux实现带-a-l的简单ls命令(C语言实现)

实现带-a-l的简单ls命令 实现功能 实现 -l 、 -a 两个选项,输出样式基本参照系统的 ls 命令 ⽀持传⼊多个参数 ⽀持缺省参数 对于输出,依照⽂件名按照字典序排序 输出对⽬录和可执⾏⽂件带颜⾊ 程序结束,成功返回0,失败返回⾮零值 代码 #include<stdio.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> #include<dirent.h>

Left_Zzzz的博客 329

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linux下的 ls 命令的简单实现

Linux下ls命令的简单实现

张小彬的专栏 5195

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

linux 函数实现ls -l命令

linux 函数实现ls -l命令 #include #include #include #include #include #include #include #include #include #include int mystat(char *str); DIR *dir; struct dirent *sd; struct stat stbuf; int ma

木有 2038

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

python中ls是什么_Python学习之旅:使用Python实现Linux中的ls命令

PythonPython开发Python语言Python学习之旅:使用Python实现Linux中的ls命令 一、写在前面 在 Linux 中 ls 是一个使用频率非常高的命令了,可选的参数也有很多, 算是一条不得不掌握的命令。Python 作为一门简单易学的语言,被很多人认为是不需要认真学的,或者只是随便调个库就行了,那可就真是小瞧 Python 了。那这次我就要试着用 P...

weixin_39965673的博客 4195

Linux下 C语言实现 ls命令以及ls -l命令

文章目录前期准备DIR结构体dirent结构体stat结构体st_mode结构体ls的实现大致思路以下是源代码:运行结果 :ls -l 的实现大致思路:1. total值的计算2. 文件时间的显示tm结构体以下是源代码:运行结果 : 前期准备 DIR结构体 首先开始先来看看DIR这个结构体 , 以下为DIR结构体的定义 : struct __dirstream { ...

Nonpc的博客 6189

Linux常用命令详解 ls -l命令详解

linux常用命令ls -l命令详解 一、ls -l命令显示效果 使用ls -l会产生长列表格式输出,包含了目录中每个文件的更多的信息。 注:蓝色或/表示目录,如果带绿色或*号表示可执行文件。 二、输出的九列信息分别含义 1、第一列:(1)、第一个字母含义如下: ‘d’:目录文件; ‘-’:普通文件; ‘p’:管理文件; ‘l’:链接文件; ‘b’:块设备文件; ’c‘:字符设备文件; ‘s’:套接字文件。 (2)、后面九个字母分别3个为一组(r表示读权限,w表示写权限,x表示可执行权限,-表示无权限),

高尚老薛头的博客 5万+

linux之ls -l命令详解

使用ls -l 命令可得到一个目录下的文件和子目录的详细信息,一共包含9列。 第1列:为文件属性字段 (1)第1个字母为文件类型: d:目录文件, -:普通文件 p:管理文件 l:链接文件 b:块设备文件 c:字符设备文件 s:套接字文件 (2)文件权限:r表示读权限,w表示写权限,x表示可执行权限,-表示无权限 第2个字母-第4个字母:表示所有者权限 第5个字母-第7个字母:表示组用户权限 第...

鸡排小农的博客 1万+

Linux中的wc -l 和 ls -l 命令

此行表示一个名为的目录,它的权限为drwxr-xr-x(所有者拥有全部权限,同组用户和其他用户仅有读和执行权限)。这个目录的所有者是lindsey,所属组是staff,目录的大小为96字节,最后修改时间是9月5日 11:45。wc -l:统计文件或输入流中的行数。ls -l:以长格式列出目录内容,显示详细的文件和目录信息。

qq_37397652的博客 3977
上一篇: Linux tree命令 简单实现
下一篇: Linux 杂谈_命令 vim 工具
rugu-sco
博客等级 码龄10年 487粉丝 124原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值