Linux系统编程入门 | 模拟实现 ls -l 命令

模拟实现代码

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
#include <string.h>int main(int argc, char* argv[]) {if (argc < 2) {printf("%s filename\n", argv[0]);return -1;}struct stat st;int sta = stat(argv[1], &st); // 输入的第一个参数就是文件名称,第二个参数为带回结果的结构体if (sta == -1) {perror("stat");return -1;}char perms[11] = {0}; // 10个字符的字符串// 文件类型switch(st.st_mode & __S_IFMT) {case __S_IFSOCK:perms[0] = 's';break;case __S_IFLNK:perms[0] = 'l';break;case __S_IFREG:perms[0] = '-';break;case __S_IFBLK:perms[0] = 'b';break;case __S_IFDIR:perms[0] = 'd';break;case __S_IFCHR:perms[0] = 'c';break;case __S_IFIFO:perms[0] = 'p';break;default:perms[0] = '?';}// 使用者权限perms[1] = (st.st_mode & S_IRUSR) ? 'r' : '-';perms[2] = (st.st_mode & S_IWUSR) ? 'w' : '-';perms[3] = (st.st_mode & S_IXUSR) ? 'x' : '-';// 同组其他人权限perms[4] = (st.st_mode & S_IRGRP) ? 'r' : '-';perms[5] = (st.st_mode & S_IWGRP) ? 'w' : '-';perms[6] = (st.st_mode & S_IXGRP) ? 'x' : '-';// 其他人权限perms[7] = (st.st_mode & S_IROTH) ? 'r' : '-';perms[8] = (st.st_mode & S_IWOTH) ? 'w' : '-';perms[9] = (st.st_mode & S_IXOTH) ? 'x' : '-';// 获取硬链接数int linkNum = st.st_nlink;// 获取文件所有者名字char *uid = getpwuid(st.st_uid)->pw_name;// 获取文件所在组char *gid = getgrgid(st.st_gid)->gr_name;// 获取文件大小(用long int)long int size = st.st_size;// 获取修改时间char *time = ctime(&st.st_mtime); // 传入参数为地址// 去掉时间后面的换行符char mtime[512] = {0};// strlen去掉最后的\0后的长度,注意是strncpy(第三个参数可以指定长度),不是strcpystrncpy(mtime, time, strlen(time) - 1); char buf[1024];sprintf(buf, "%s %d %s %s %ld %s %s", perms, linkNum, uid, gid, size, mtime, argv[1]);printf("%s\n", buf);return 0;
}

运行结果
在这里插入图片描述
1、Linux的文件类型
在这里插入图片描述
在这里插入图片描述

  1. 普通文件(Regular File):
    常见的文件类型,用于存储数据
    包括文本文件、二进制文件、脚本文件等
    在文件类型标识中用 - 表示
  2. 目录文件(Directory File):
    包含其他文件和目录的容器,用于组织文件系统的结构
    在文件类型标识中用 d 表示
  3. 符号链接文件(Symbolic Link File,软连接):
    类似于Windows中的快捷方式,指向另一个文件或目录
    在文件类型标识中用 l 表示
  4. 字符设备文件(Character Device File):
    提供对字符流设备的访问,例如键盘、鼠标、串口等
    在文件类型标识中用 c 表示
  5. 块设备文件(Block Device File):
    提供对块设备的访问,例如硬盘、光驱等
    在文件类型标识中用 b 表示
  6. 套接字文件(Socket File):
    用于网络通信的文件类型,允许进程之间的双向通信
    在文件类型标识中用 s 表示
  7. 命名管道文件(Named Pipe, FIFO):
    用于进程间通信,允许一个进程写入数据,另一个进程读取数据
    在文件类型标识中用 p 表示

2、man 命令中不同的数字表示手册页的不同部分:
1:用户命令
2:系统调用
3:库函数
4:设备文件和特殊文件
5:文件格式
6:游戏
7:杂项
8:系统管理命令

3、argv[0] 通常表示的是程序本身的名称

./my_program arg1 arg2

argv[0] = “./my_program”(表示程序的名称或路径)
argv[1] = “arg1”(表示第一个命令行参数)
argv[2] = “arg2”(表示第二个命令行参数)

argv[0] 不一定总是只包含程序的名称,它也可以包含程序的路径,取决于你是如何运行程序的
如果运行命令是 ./my_program,则 argv[0] 可能是 “./my_program”
如果运行命令是 my_program,则 argv[0] 可能是 “my_program”

4、time_t 是C/C++编程语言中用于表示时间的数据类型。它定义在头文件 <time.h> 中(C++中是 <ctime>),通常用于表示从1970年1月1日00:00:00 UTC(即“Unix纪元”)到当前时间的秒数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144318.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

为什么嫁人就要嫁公务员?稳定、收入高、福利好、资源多

在现代社会&#xff0c;择偶不仅仅是感情问题&#xff0c;更涉及到经济、社会地位和未来生活的方方面面。 对于很多女性来说&#xff0c;选择一个稳定、可靠的伴侣至关重要。而公务员作为一个备受尊敬的职业&#xff0c;成为了很多人心目中的理想对象。 那么&#xff0c;为什…

使用密钥文件登陆Linux服务器

假设A服务器为登陆目标,已经运行ssh服务。 B服务器作为登陆发起端。 登陆A服务器,账户S。 运行命令: ssh-keygen -t rsa 此时账户S家目录下会自动创建目录“.ssh”,目录下会有id_rsa和id_rsa.pub两个文件。 id_rsa为私钥,id_rsa.pub为公钥。 id_rsa文件内容下载到B服务…

web基础—dvwa靶场(七)SQL Injection

SQL Injection&#xff08;SQL注入&#xff09; SQL Injection&#xff08;SQL注入&#xff09;&#xff0c;是指攻击者通过注入恶意的SQL命令&#xff0c;破坏SQL查询语句的结构&#xff0c;从而达到执行恶意SQL语句的目的。SQL注入漏洞的危害是巨大的&#xff0c;常常会导致…

勒索软件和四重勒索策略:使用易备数据备份软件进行保护

文章内容&#xff1a; 1. 勒索行为类型 2. 勒索软件的演变&#xff1a;四重勒索 3. 遭遇勒索软件攻击时应遵循的准则 4. 防御勒索攻击的工具 5. 使用易备数据备份软件进行预防和备份 2024 年&#xff0c;勒索软件仍然是全球网络安全面临的最大威胁之一。威胁形势不断演变&#…

win11 下载安装MYSQL 5.7.30(保姆教程)

目录 一、下载安装包 二、安装 三、试一下 四、解决问题 1.如果出现“mysql不是内部或外部命令&#xff0c;也不是可运行的程序” 1.配置环境变量 2.重新打开cmd测试 一、下载安装包 进入下载链接&#xff1a;https://www.mysql.com/why-mysql/windows/https://www.mysq…

00898 互联网软件应用与开发自考复习题

资料来自互联网软件应用与开发大纲 南京航空航天大学 高纲4295和JSP 应用与开发技术(第 3 版) 马建红、李学相 清华大学出版社2019年 第一章 一、选择题 通过Internet发送请求消息和响应消息使用&#xff08;&#xff09;网络协议。 FTP B. TCP/IP C. HTTP D. DNS Web应…

OpenAI 的最强模型 o1 的“护城河”失守?谷歌 DeepMind 早已揭示相同原理

发布不到一周&#xff0c;OpenAI 的最新模型 o1 的“护城河”似乎已经失守。 近日&#xff0c;有人发现谷歌 DeepMind 早在今年 8 月发表的一篇论文&#xff0c;揭示了与 o1 模型极其相似的工作原理。 这项研究指出&#xff0c;在模型推理过程中增加测试时的计算量&#xff0c…

SAP SPROXY 配置

事务码SPROXY 然后找到目标的地址 然后创建新对象即可

基于springboot的在线视频点播系统

文未可获取一份本项目的java源码和数据库参考。 国外研究现状&#xff1a; 与传统媒体不同的是&#xff0c;新媒体在理念和应用上都采用了新颖的媒介或媒体。新媒体是指应用在数字技术、在传统媒体基础上改造、或者更新换代而来的媒介或媒体。新兴媒体与传统媒体在理念和应用…

大数据产业核心环节有哪些?哪里可以找到完整的大数据产业分析?

▶大数据产业前景开阔 大数据产业正站在数字化时代前沿&#xff0c;预计在未来几年将实现显著增长和扩展。目前&#xff0c;中国大数据产业规模在2021年已达到1.3万亿元&#xff0c;并在2022年增长至1.6万亿元&#xff0c;预计到2025年将突破3万亿元大关&#xff0c;年均复合增…

客户文章 | DAP-seq助力揭示MYC2转录因子调控银杏萜内酯生物合成的分子机制

银杏萜内酯是银杏中重要的天然药用活性成分&#xff0c;具有抗血栓、抗炎、治疗心脑血管疾病和预防阿尔茨海默病等药理活性&#xff0c;也是血小板活化因子的强拮抗剂。萜内酯在银杏中的含量极低&#xff0c;难以满足医药行业的需求&#xff0c;限制了银杏产业的发展和临床应用…

用友U8二次开发工具KK-FULL-*****-EFWeb使用方法

1、安装: 下一步&#xff0c;下一步即可。弹出黑框不要关闭&#xff0c;让其自动执行并关闭。 2、服务配置&#xff1a; 输入服务器IP地址&#xff0c;选择U8数据源&#xff0c;输入U8用户名及账号&#xff0c;U8登录日期勾选系统日期。测试参数有效性&#xff0c;提示测试通过…

月入10000+,蓝海项目!少儿英语赛道

一、项目原理 少儿英语赛道的话&#xff0c;我们主要通过英语小短文&#xff0c;来让孩子学习英语&#xff0c;虽然现在有很多英语的课程&#xff0c;但针对少儿的英语是比较少的&#xff0c;所以这个赛道还是很吃香的。 整体流程也简单&#xff0c;先用AI写出故事&#xff0…

Android15之源码分支qpr、dp、beta、r1含义(二百三十二)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter

SpringBoot解析Json格式数据 ResponseBody 注&#xff1a;该注解表示前端请求后端controller&#xff0c;后端响应请求返回 json 格式数据前端&#xff0c;实质就是将java对象序列化 1.创建Controller 注&#xff1a;springboot默认就已经支持返回json格式数据&#xff0c;只需…

多智能体强化学习示例

程序功能 这段代码实现了一个多智能体强化学习环境&#xff0c;其中两个智能体在5x5的网格上移动&#xff1a; 智能体目标&#xff1a; Agent 1 从 (0, 0) 出发&#xff0c;目标是 (4, 4)。 Agent 2 从 (4, 4) 出发&#xff0c;目标是 (0, 0)。 动作空间&#xff1a;每个智能体…

2023年全国研究生数学建模竞赛华为杯C题大规模创新类竞赛评审方案研究求解全过程文档及程序

2023年全国研究生数学建模竞赛华为杯 C题 大规模创新类竞赛评审方案研究 原题再现&#xff1a; 现在创新类竞赛很多&#xff0c;其中规模较大的竞赛&#xff0c;一般采用两阶段&#xff08;网评、现场评审&#xff09;或三阶段&#xff08;网评、现场评审和答辩&#xff09;评…

数据库加密算法

功能简介 对数据库字段进行加密,如下图: 一、yml配置 注意: MD5_32 MD5_16 BASE64 AES SM2 SM3 SM4 需要 password(14位 ,26位, 32 位) 就行 非对称算法如:SM2,RSA, 需要配置 密码:password 公钥:publicKey 私钥:privateKey yml: # 数据加密 mybatis-encry…

【Linux】从内核认识信号

一、阻塞信号 1 .信号的一些其他相关概念 实际执行信号的处理动作称为信号递达(Delivery) 信号从产生到递达之间的状态,称为信号未决(Pending)。 进程可以选择阻塞 (Block )某个信号。 被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作. 注…

商标转让成功,转让前和转让后的注意!

近日帮给某公司办理的商标转让证明成功下证&#xff0c;在购买闲置商标或者不同的主体之间商标需要更换的&#xff0c;就要做商标转让申请&#xff0c;大约是2个半月到3个月左右就可以下证。 商标转让时近似商标要一并转让&#xff0c;要不就没办法转让成功&#xff0c;比如在3…