IO进程线程,文件与目录,实现linux任意目录下ls -la

注意文件的名字、路径是如何输入的。

函数opendir打开目录,struct dirent,struct stat这些结构体的含义。 

        readdir()函数是一个用于读取目录内容的系统调用或库函数,在类Unix操作系统中(如Linux)广泛使用。它用于遍历目录,并逐个获取目录中的条目(文件和子目录)。

        lstat和stat是用于获取文件信息的系统调用,主要在处理符号链接时存在差异。以下是它们之间的主要区别:

1. 处理符号链接:
  lstat:当使用lstat函数获取一个符号链接的信息时,它返回的是符号链接本身的信息,而不是链接所指向文件的信息。这使得你能够查看链接本身的属性,而不用跟随链接指向的文件。
   stat:当使用stat函数获取一个符号链接的信息时,它会自动跟随链接,返回链接指向的文件的信息,而不是链接本身的信息。

2. 跟随链接:
   lstat:对于符号链接,lstat不会自动跟随链接,它会返回链接本身的属性,包括链接指向的路径。
  stat:对于符号链接,stat会自动跟随链接,返回链接指向的文件的属性。

        对于符号链接,`lstat`返回了链接本身的信息,而`stat`返回了链接指向的文件的信息。

/*===============================================
*   文件名称:stat.c
*   创 建 者:WM
*   创建日期:2023年08月24日
*   描    述:文件目录下除了隐藏文件查看
================================================*/
#include <stdio.h>
#include <sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<string.h>
#include<pwd.h>
#include<grp.h>
#include<time.h>
#include<dirent.h>
int main(int argc, char *argv[])
{ char path[100]={0};if(2!=argc){printf("error\n");return -1;}DIR * dirp=opendir(argv[1]);//获取所有的目录下的文件名struct dirent *a;//接收strcpy(path,argv[1]);while (NULL!=(a=readdir(dirp)))//从第一个文件名开始遍历到最后。{struct stat st;strcpy(path,argv[1]);strcat(path,"/");strcat(path,a->d_name);if(a->d_name[0]=='.')//去除隐藏文件continue;lstat(path,&st);//链接文件读取if(S_ISREG(st.st_mode))//判断文件类型printf("-");else if (S_ISDIR(st.st_mode))printf("d");else if(S_ISLNK(st.st_mode))printf("l");for (  int i=8; i >= 0; i-=3)//查看文件的权限{if(st.st_mode & 1<<i)printf("r");elseprintf("-");if(st.st_mode&1<<(i-1))printf("w");elseprintf("-");if(st.st_mode&1<<(i-2))printf("x");elseprintf("-");}//链接数printf(" %ld",st.st_nlink);//用户名struct passwd *pw=getpwuid(st.st_uid);printf(" %s ",pw->pw_name);//用户组名struct group *gr =getgrgid(st.st_gid);printf( "%s",gr->gr_name);//大小printf(" %ld",st.st_size);//去除换行char arr[100]={0};strcpy(arr,ctime(&st.st_mtime));if(arr[strlen(arr)-1]=='\n')arr[strlen(arr)-1]='\0';printf(" %s ",arr);printf(" %s ",a->d_name);puts("");}return 0;
} 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫10:selenium库

python爬虫10&#xff1a;selenium库 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论&#xff0c;并不会对网站产…

leetcode算法题--复杂链表的复制

原题链接&#xff1a;https://leetcode.cn/problems/fu-za-lian-biao-de-fu-zhi-lcof/description/?envTypestudy-plan-v2&envIdcoding-interviews 感觉一开始想到的办法还是比较笨 /*** Definition for a Node.* type Node struct {* Val int* Next *Node* …

C语言练习题Day1

从今天开始分享C语言的练习题&#xff0c;每天都分享&#xff0c;差不多持续16天&#xff0c;看完对C语言的理解可能更进一步&#xff0c;让我们开始今天的分享吧&#xff01; 题目一 执行下面的代码&#xff0c;输出结果是&#xff08;&#xff09; int x5,y7; void swap()…

Qt --- 对象树机制、析构顺序导致崩溃

{QWidget widget;QPushButton buttonQuit("Quit",&widget); } 作为父组件的widget&#xff0c;子组件buttonQuit都是QObject的子类&#xff1b;上述代码运行没有问题。 代码析构时&#xff0c;因为C的要求&#xff0c;局部对象的析构时按照实例化顺序逆向的顺序…

「MySQL-01」MySQL基础

目录 一、数据库概念 1. 什么是数据库 2. 为什么要有数据库&#xff1f; 3. 数据库将数据存在哪里&#xff1f; 二、知名数据库介绍 1.知名数据库介绍 2.为什么要学习MySQL 三、MySQL的基本使用 0. 安装MySQL 1. 数据库客户端链接服务端 2. Windows下的MySQL服务端管理 3. 数据…

昌硕科技、世硕电子同步上线法大大电子合同

近日&#xff0c;世界500强企业和硕联合旗下上海昌硕科技有限公司&#xff08;以下简称“昌硕科技”&#xff09;、世硕电子&#xff08;昆山&#xff09;有限公司&#xff08;以下简称“世硕电子”&#xff09;的电子签项目正式上线。上线仪式在上海浦东和硕集团科研大楼举行&…

flowable源码解析之分析环境搭建

系列文章目录 第一章 源码分析环境搭建 第二章 流程引擎启动(一) 第三章 流程引擎启动(二) 第四章 流程引擎启动(三) 第五章 流程引擎启动(四) 第六章 流程部署 第七章 流程模型解析 第八章 流程的发起 第九章 数据存储机制 文章目录 系列文章目录一、Flowable源码分析…

使用fastjson2的@JSONField注解解决日期格式记录

最近在做一个三方对接&#xff0c;对方的日期格式数据要求时间日期格式: yyyyMMddHHmmss或者 yyyyMMdd&#xff0c;我一下想起了fastjson2工具包&#xff0c;所以很愉快的解决了此问题。 依赖jar如下&#xff1a; <dependency><groupId>com.alibaba.fastjson2</…

mysql 触发器格式,修改触发器,创建触发器,触发条件

1.查询所有触发器 show triggers; 2.创建触发器 #修改结束符 delimiter $$create trigger <自定义出发名> after insert on <所监听的表名> for each row begin#执行多条sql语句#拿到监听数据 关键字 new/old 即 新数据/旧数据update classify set cat_num cat…

每日一博 - 闲聊云原生和容器编排

文章目录 概念1. 云原生&#xff08;Cloud Native&#xff09;&#xff1a;2. 容器编排&#xff08;Container Orchestration&#xff09;&#xff1a; 小结 概念 云原生和容器编排是两个不同的概念&#xff0c;但它们之间有着密切的联系。下面将分别介绍这两个概念&#xff0…

day-02 套接字类型与协议设置、地址族和数据序列

一.套接字类型 1.面向连接的套接字&#xff08;SOCK_STREAM&#xff09; 特点&#xff1a; 传输过程中数据不会消失按顺序传输数据传输的数据不存在数据边界 2.面向消息的套接字&#xff08;SOC_DGRAM&#xff09; 特点&#xff1a; 强调快速传输而非传输顺序传输的数据可…

【C++】const成员 | 取地址运算符重载

Ⅰ. const成员 两种const 我们知道&#xff0c;用const修饰 能起到保护&#xff0c;使之不被修改的作用。 修饰指针的const有两种位置&#xff1a; 我们学过的this指针&#xff0c;就被后者所修饰&#xff0c;因此无法被修改。 const成员函数 ➡️为了保护函数里的成员&…

《Java极简设计模式》第05章:原型模式(Prototype)

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 源码地址&#xff1a;https://github.com/binghe001/java-simple-design-patterns/tree/master/j…

【日常积累】Linux下sftp搭建

概述 SFTP是Secure File Transfer Protocol的缩写&#xff0c;是安全文件传送协议。可以为传输文件提供一种安全的加密方法。跟ftp几乎语法功能一样。 SFTP是SSH的一部分&#xff0c;是一种传输档案至Blogger伺服器的安全方式。它本身没有单独的守护进程&#xff0c;必须使用s…

Elasticsearch 8.X reindex 源码剖析及提速指南

1、reindex 源码在线地址 为方便大家验证&#xff0c;这里给出 reindex github 源码地址。 https://github.com/elastic/elasticsearch/blob/001fcfb931454d760dbccff9f4d1b8d113f8708c/server/src/main/java/org/elasticsearch/index/reindex/ReindexRequest.java reindex 常见…

开源软件的崛起:历史与未来

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Lambda函数

一.概念 1.利用lambda表达式可以编写内嵌的匿名函数&#xff0c;用以替换独立函数或者函数对象 2.每当你定义一个lambda表达式后&#xff0c;编译器会自动生成一个匿名类&#xff08;这个类当前重载了&#xff08;&#xff09;运算符&#xff09;&#xff0c;我们称为闭包类型…

8.6 【C语言】返回指针值的函数

一个函数可以返回一个整型值、字符值、实型值等&#xff0c;也可以返回指针型的数据&#xff0c;即地址。 类型名 *类型名&#xff08;参数表列&#xff09; 例8.25 有a个学生&#xff0c;每个学生有b门课程的成绩。要求在用户输入学生序号以后&#xff0c;能输出该学生的全部…

Lazada商品详情接口 获取Lazada商品详情数据 Lazada商品价格接

一、引言 随着电子商务的迅速发展和普及&#xff0c;电商平台之间的竞争也日趋激烈。为了提供更好的用户体验和更高效的后端管理&#xff0c;Lazada作为东南亚最大的电商平台之一&#xff0c;开发了一种商品详情接口&#xff08;Product Detail API&#xff09;。该接口允许第…

数据可视化是什么?有什么工具?

一、什么是数据可视化&#xff1f; 数据可视化是一种通过图表、图形、地图和其他视觉元素将数据呈现给用户的方式。它是将复杂的数据转化为易于理解和解释的视觉形式的过程。数据可视化旨在帮助用户发现数据中的模式、趋势和关联&#xff0c;并从中获得洞察力。 数据可视化的…