当前位置: 首页 > news >正文

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.lryc.cn/news/144860.html

相关文章:

  • R语言如果列表中有列表,且每个子列表有一个向量:如何转变为仅仅一个列表里面含有向量
  • nrm管理源仓库及发布私人npm包
  • 云计算——虚拟化中的网络架构与虚拟网络(文末送书)
  • B - 负环
  • 居中一个元素(水平+垂直居中)
  • React笔记(二)JSX
  • [多标签分类]MultiLabelBinarizer: 从one-hot 到multi-hot
  • 【校招VIP】前端算法考察之排序
  • 集创北方ICN6211 是一款MIPIDSI转RGB视频桥接IC
  • SMT制造中的产品质量检验和管理
  • 对接webservice接口时报错:发送方和接收方 Action 不匹配
  • python实现/直播服务器/聊天服务器/的多种解决方案
  • PbootCMS 3.0.4 SQL注入
  • SpringBoot异步方法支持注解@Async应用
  • UI/UX设计与前端开发:从零到一打造完美用户体验
  • Hadoop Hdfs基本命令
  • Spring Boot 整合MyBatis(超详细)
  • 【管理运筹学】第 6 章 | 运输问题(4,表上作业法 |闭回路调整法以及特殊情况 | 产销不平衡的运输问题)
  • Greenplum实用技巧
  • 以物联网为核心的智慧工地云平台:聚集智能技术,实现建筑工地智慧管理
  • Java项目-苍穹外卖-Day05-Redis技术应用
  • linux安装jmeter
  • 【笔记】泛型以及如何绕过泛型定义
  • JAVA JNA 调用C接口的三种方式
  • StarRocks入门到熟悉
  • 华为AR路由器 典型配置案例——以太网交换
  • DP读书:鲲鹏处理器 架构与编程(十三)操作系统内核与云基础软件
  • Vue2项目练手——通用后台管理项目第一节
  • 「Vue|网页开发|前端开发」02 从单页面到多页面网站:使用路由实现网站多个页面的展示和跳转
  • 【Nginx20】Nginx学习:FastCGI模块(二)缓存配置