实现ls -l 功能,index,rindex函数的使用

index();-----------------------------------------------------------------

index第一次遇到字符c,rindex最后一次遇到字符c,返回值都是从那个位置开始往后的字符串地址

#include <stdio.h>
#include <sys/types.h>
#include <pwd.h>
#include <sys/stat.h>
#include <unistd.h>
#include <grp.h>
#include <time.h>
#include <dirent.h>
#include <string.h>

int do_ls_file(const char *filename)
{
	//stat --获取文件属性信息 
	struct stat st;

	if (stat(filename,&st) < 0) //"Music" stat("./Music",&st) //"~/Music"
	{
		perror("stat fail");
		return -1;
	}

	//1.打印 文件类型
    switch(st.st_mode & S_IFMT)
	{
		case S_IFSOCK:
			putchar('s');
			break;
		case S_IFLNK:
			putchar('l');
			break;
		case S_IFREG:
			putchar('-');
			break;
		case S_IFBLK:
			putchar('b');
			break;
		case S_IFCHR:
			putchar('c');
			break;
		case S_IFIFO:
			putchar('p');
			break;
		case S_IFDIR:
			putchar('d');
			break;
		default:
			putchar('?');
			break;
	}
	//2.文件权限 
	st.st_mode&S_IRUSR?putchar('r'):putchar('-');	
	st.st_mode&S_IWUSR?putchar('w'):putchar('-');	
	st.st_mode&S_IXUSR?putchar('x'):putchar('-');	
	
	st.st_mode&S_IRGRP?putchar('r'):putchar('-');	
	st.st_mode&S_IWGRP?putchar('w'):putchar('-');	
	st.st_mode&S_IXGRP?putchar('x'):putchar('-');	
	
	st.st_mode&S_IROTH?putchar('r'):putchar('-');	
	st.st_mode&S_IWOTH?putchar('w'):putchar('-');	
	st.st_mode&S_IXOTH?putchar('x'):putchar('-');	
	//3.硬链接数
	printf(" %ld",st.st_nlink);
	//4.所属用户 
	printf(" %s",getpwuid(st.st_uid)->pw_name);
	//5.所属组
	printf(" %s",getgrgid(st.st_gid)->gr_name);
	//6.大小 
	printf(" %ld",st.st_size);
	//7.最后修改时间 
    struct tm *ptm = localtime(&st.st_mtime);	
	printf(" %02d月%02d %02d:%02d",ptm->tm_mon+1,ptm->tm_mday,ptm->tm_hour,ptm->tm_min);
	//8.名字
	printf(" %s\n",rindex(filename,'/')+1);  //filename是人为加上带路径的文件名
	
	return 0;
}


int do_ls_dir(const char *dirname)
{
	DIR *dir = opendir(dirname);
	if (dir == NULL)
	{
		perror("opendir fail");
		return -1;
	}

	struct dirent *pdir = NULL;

	while (pdir=readdir(dir))
	{

//		printf("name = %s\n",pdir->d_name); //"Music"
		char path[1024] = {0};
		
		// "~"
		// "~/" 
		if(pdir->d_name[0] != '.')
		{
			dirname[strlen(dirname)-1] == '/'?sprintf(path,"%s%s",dirname,
                      pdir->d_name):sprintf(path,"%s/%s",dirname,pdir->d_name);
			//带了路径的文件名

			do_ls_file(path); //"~/Music"
		}
	}

	closedir(dir);
}

//ls 1.txt 
//ls dir
int main(int argc, const char *argv[])
{

	if (argc != 2)
	{
		printf("Usage: %s <filename>\n",argv[0]);
		return -1;
	}

//	do_ls_file(argv[1]);

	do_ls_dir(argv[1]);
	
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot | Spring Boot的“核心配置“与“注解“

目录: Spring Boot的核心配置与注解 &#xff1a;1. 全局配置文件 ( application.properties / application.yaml&#xff1a;创建项目时候自动生成&#xff0c;其会被“自动导入”到“程序”中 )application.properties配置文件application.yaml 配置文件 (推荐使用)当value值…

MAC使用Clion开发STM32

安装软件 CLion &#xff1a;略 STM32CubeMX&#xff1a;略 brew &#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"openocd &#xff1a; brew install open-ocd # 以下命令有输出说明安装成功 openocd -…

linux 系统安装php 8.0.2

1. 安装包准备 https://www.php.net/distributions/php-8.0.22.tar.gz 我下载到 /usr/local/src 这个目录了 cd /usr/local/srcwget https://www.php.net/distributions/php-8.0.22.tar.gz 2. tar 解压 然后进到解压的文件夹 tar -zxvf php-8.0.22.tar.gz cd php-8.0.2…

0101支付安全-支付模块-项目实战

文章目录 一、信息安全的基础-机密性1 相关概念2 对称加密和非对称加密 二、身份认证三 摘要算法四、数字签名五、数字证书结语 在支付过程中&#xff0c;设计多方的敏感信息&#xff0c;那么安全尤为重要。下面先简单介绍下&#xff0c;相关概念。 一、信息安全的基础-机密性 …

YOLOv8项目解析——一文搞定目标检测、语义分割、状态估计、目标追踪算法原理与模型部署

简介 Ultralytics YOLOv8是一种前沿的、最先进的&#xff08;SOTA&#xff09;模型&#xff0c;它在前代YOLO版本的成功基础上进行了进一步的创新&#xff0c;引入了全新的特性和改进&#xff0c;以进一步提升性能和灵活性。作为一个高速、精准且易于操作的设计&#xff0c;YO…

基于单片机的智能汽车防盗系统设计

摘要:本文介绍了一种以汽车专用单片机飞思卡尔MC68HC908QT4CPE 作为底层主控芯片,人体远红外热释传感器、防闯入光幕墙及振动传感器作为检测装置的汽车防盗系统。单片机将检测到的防盗传感器开关信号,通过数据分析,系统可以设置布防和解除布防模式,在布防模式下,当检测到…

【AI+编程】使用chatGPT AI工具Python语言从0到1完成pdf转docx小工具

昨天运营同学问我一个问题&#xff0c;能不能把一个pdf转换成 docx 。 我给他提供了2种方式。一是用 PDF Reader PRO软件&#xff0c; 一个是WPS会员&#xff08;普通用户只能转换3页&#xff09;。 休息间隙&#xff0c;脑海里冒出一个想法。能不能用python写一个pdf转换do…

免杀对抗-C2远控篇CC++SC转换格式UUID标识MAC物理IPV4地址减少熵值

参考文章&#xff1a; https://github.com/INotGreen/Bypass-AMSI https://mp.weixin.qq.com/s/oJ8eHdX8HGuk6dZv0kmFxg https://kyxiaxiang.github.io/2022/12/14/AMSIandEtw https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell 文章参考&#xff1a; https://www.…

SQLAlchemy模型映射提示declarative_base() takes 0 positional arguments but 1 was given

原码&#xff1a; #SQLAlchemy模型映射表结构. from sqlalchemy import create_engine,Column,Integer,String from sqlalchemy.ext.declarative import declarative_base# 数据库的变量 HOST 127.0.0.1 PORT 3306 DATA_BASE itbz USER root PWD 123456 DB_URL fmysqlpy…

deepspeed chat RLHF个人笔记(待完成)

一、linux配置 # 新的linux配置: 1. 查看linux版本 uname -a 2. linux装软件ubuntu:安装软件:sudo apt install 软件名更新软件源:sudo apt update升级已安装的软件:sudo apt upgrade3. ubuntu 查看终端类型printenv | grep TERM 3. 安装 c编译器 sudo apt-get update sudo ap…

使用Redis位图实现12306分段购票

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 很多编程语言都有位运算符,Java语言也不例外。在Java语言中,提供了7种位…

通信原理QPSK OQPSK MSK 信道编码 GMSK

通信原理 通信QPSKOQPSKMSK信道编码GMSK需要的联系qq&#xff1a;2329738917 通信 QPSK OQPSK MSK 信道编码 GMSK 需要的联系qq&#xff1a;2329738917

小黑开始了芙蓉路岔气恰巧看到芙蓉脱单,假期东方时尚的学车生活,跟尚香骑车去北大微电子学院,在雪天考科目二的leetcode之旅: 43. 字符串相乘

小黑代码1:暴力转换 class Solution:def multiply(self, num1: str, num2: str) -> str:num1 int(num1)num2 int(num2)return str(num1 * num2)小黑代码2:转化为多位数x一位数 class Solution:def multiply(self, num1: str, num2: str) -> str:# 定义多位数x一位数的…

Github简单入门教程

文章目录 使用前提查看项目内容查看项目介绍打包下载项目查看项目作者项目搜索复制项目分支项目创建向项目中添加文件对项目进行评论 使用前提 想要使用Github&#xff0c;首先需要学会科学上网&#xff0c;不然用国内的网在正规情况下是无法访问Github滴~ 查看项目内容 打开…

解决错误LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to

react native pod第三方包或者git clone的时候遇到 OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443两种解决方案 方法一 修改计算机网络配置 由于使用 IPv6 的原因&#xff0c;可能会导致这一问题的出现 系统在解析hostname时使用了ipv6 可以配…

联合体类型

结构体我们已经介绍在 自定义类型&#xff1a;结构体 中&#xff0c;今天我们来介绍另一种 自定义类型&#xff1a;联合体 目录 1.联合体的声明 2.联合体的特点 3.联合体大小的计算 4.联合体的应用 5.联合体的一个练习 1.联合体的声明 联合体与结构体类似&#xff0c;它也…

webpack练习之手写loader

手写一个style-loader来把样式文件插入head里面&#xff0c;准备工作 vue webpack就自己弄了&#xff0c;webpack的一些配置也自己配置好 一、创建index.css文件 .box{width: 100px;height: 100px;background-color: red; }然后在vue的main.js文件中引入它 二、创建自定义l…

深度学习知识【CSPNet网络详解】

CSPNet的贡献 1.增强了CNN的学习能力&#xff0c;能够在轻量化的同时保持准确性。 2.降低计算瓶颈。 3.降低内存成本。 CSPNet介绍 在神经网络推理过程中计算量过高的问题是由于网络优化中的梯度信息重复导致的。CSPNet通过将梯度的变化从头到尾地集成到特征图中&#xff0c…

2024水业大会|水会|水务投资与EOD模式论坛

论坛召集人&#xff1a;邹权 上海大学研究员 丁贞玉 生态环境部环境规划院研究员(拟请) EOD模式&#xff1a;生态环境导向的开发模式 《生态环保金融支持项目储备库入库指南&#xff08;试行&#xff09;》文件精神与上述逻辑并不完全一致。《指南》提出&#xff0c;EOD模…

阿里云服务器 -- 为网站配置域名

思考&#xff1a;小云已经成功的通过云服务器ECS完成了网站的架设和测试工作&#xff0c;那么是否可以让他的网站直接对外提供服务&#xff1f; 小云&#xff1a;我已经成功的通过云服务器ECS完成了网站的架设和测试&#xff0c;那么是不是就可以正式对所有用户开放我的网站了…
最新文章