Linux C 目录编程

目录编程

  • 前言
  • 目录编程函数
      • mkdir  创建目录
      • rmdir  删除目录
      • opendir  打开目录
      • readdir  读取目录
      • stat  获取文件信息
      • chdir  跳转目录
      • closedir  关闭目录
  • 判断文件类型的宏
  • 遍历指定目录及子目录下所有.c文件示例

前言

  相较于文件编程,目录编程也有一套自己的函数,可以进行创建、打开、读取等目录操作。
  在日常中使用较多的是遍历目录,比如音乐播放器检测本地音乐、视频播放器打开指定目录下的视频等等。

目录编程函数

mkdir  创建目录

头文件:
  #include <sys/stat.h>
  #include <sys/types.h>
函数原型:int mkdir(const char *pathname, mode_t mode);
参数介绍:
  pathname:要创建的文件的 路径+名字
  mode:创建的文件的权限(与umask相关)
返回值:创建成功返回0,失败返回-1。

	mkdir ( "./1.txt" , 0644 );

rmdir  删除目录

头文件:
  #include <unistd.h>
函数原型:int rmdir(const char *pathname);
参数介绍:
  pathname:要删除的文件的 路径+名字
返回值:删除成功返回0,失败返回-1。

	rmdir ( "./1.txt" );

opendir  打开目录

头文件:
  #include<sys/types.h>
  #include<dirent.h>
函数原型:DIR * opendir(const char * name);
参数介绍:
  name:要打开的目录的 路径+名字
返回值:如果成功打开目录,则返回一个指向该目录的目录流指针,如果失败,则返回NULL。

	DIR * dir = opendir ( "/home/wwz" );

readdir  读取目录

头文件:
  #include<sys/types.h>
  #include<dirent.h>
函数原型:struct dirent * readdir(DIR * dir);
参数介绍:
  dir:opendir返回的目录流指针
返回值:成功则返回下个目录进入点. 有错误发生或读取到目录文件尾则返回NULL。

	struct dirent * readpos = readdir ( dir );

stat  获取文件信息

头文件:
  #include<sys/types.h>
  #include<unistd.h>
函数原型:int stat(const char * file_name,struct stat *buf);
参数介绍:
  file_name:要获取信息的文件 路径+名字
  buf:保存文件信息的stat结构体容器
返回值:执行成功则返回0,失败返回-1,错误代码存于errno。

	//初始化结构体struct dirent * readpos = NULL;//目录流指针//打开目录DIR * dir = opendir ( "/home/wwz" );//当该文件能读取信息时while ( (readpos = readdir( dir )) != NULL ){char path[512] = {0};struct stat statpos;//文件信息结构体sprintf( path , "%s%s" , "/home/wwz" , readpos->d_name );//获取文件信息if( !stat ( path , &statpos ) ){printf(```结构体成员```)}}

while循环能遍历打印目录下的所有文件在这里插入图片描述

chdir  跳转目录

头文件:
  #include<unistd.h>
函数原型:int chdir(const char * path);
参数介绍:
  path:要跳转的目录 路径+名字
返回值:执行成功则返回 0,失败返回-1,errno 为错误代码。

	chdir ( "/home/root/" );

closedir  关闭目录

头文件:
  #include<sys/types.h>
  #include<dirent.h>
函数原型:int closedir(DIR *dir);
参数介绍:
  dir:要跳转关闭的目录的目录流指针
返回值:关闭成功则返回 0,失败返回-1,errno 为错误代码。

	closedir ( dir );//如果将该函数与打开目录函数置于获取文件信息//示例代码中并加入是否为文件判断//就可以递归的遍历所有文件//在文档末尾我会提供一个查看目录下//以及子目录下所有.c文件的例子

判断文件类型的宏

  当然想要实现遍历指定目录及子目录下所有.c文件还要判断文件的类型,<stat.h>中提供了相应的宏定义。

带参宏无参宏解释
S_ISLNK(mode)S_ISLNK判断是否为链接文件类型
S_ISREG(mode)S_ISREG判断是否为普通文件类型
S_ISDIR(mode)S_ISDIR判断是否为目录类型
S_ISCHR(mode)S_ISCHR判断是否为字符型设备类型
S_ISBLK(mode)S_ISBLK判断是否为块设备类型
S_ISFIFO(mode)S_ISFIFO判断是否为命名管道类型
S_ISSOCK(mode)S_ISSOCK判断是否为套接字类型

遍历指定目录及子目录下所有.c文件示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>void isDir(char *dir);
void isFile(char *name);int main(int argc,char *argv[])
{//路径信息通过argv传输if(argc == 1)printf("运行时请输入至少一个路径\n");//如果存在多个路径信息elsewhile(--argc)//先判断是不是文件,如果是文件,否则就打开目录isFile(*++argv);return 0;
}void isFile(char * name)
{struct stat buff = {0};//或取文件信息int ret = stat(name,&buff);if(ret == -1){perror("stat");exit(1);}if(S_ISDIR(buff.st_mode))//如果是目录isDir(name);else if(S_ISREG(buff.st_mode))//如果是普通文件{char *tempFileName = name;//tempFileName为指针,可以进行偏移操作//下面的 tempFileName + strlen(name)-2 就是将指针偏移到末尾的 .c 的位置if( strncmp ( tempFileName + strlen(name)-2 , ".c" , 2) == 0)printf( "%s\n" , tempFileName );}
}void isDir(char *dir)
{struct dirent *sdp;char path[256];//打开目录DIR *dp = opendir(dir);if( dp == NULL ){perror("opendir");return;}//遍历目录while( (sdp = readdir(dp)) != NULL){//防止跳转当前上级目录 造成死循环if(strcmp(sdp->d_name,".")==0||strcmp(sdp->d_name,"..")==0)continue;//或取文件信息sprintf(path,"%s/%s",dir,sdp->d_name);isFile(path);}//关闭文件int ret = closedir(dp);if(ret == -1){perror("closedir");return;}
}

运行结果图:在这里插入图片描述

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

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

相关文章

主题讲座:全球增材制造现状与未来(暨香港科技大学广州|智能制造学域2024博士学位全额奖学金项目)

时间&#xff1a;2023 年11月16日&#xff08;星期四&#xff09;14:30 地点&#xff1a;合肥工业大学 学术会议中心三楼报告厅 主讲嘉宾&#xff1a;陈模军 助理教授 https://facultyprofiles.hkust-gz.edu.cn/faculty-personal-page/CHEN-Mojun/mjchen 报名表直达&#xff1…

uniapp打包安卓app获取包名

uniapp打包安卓app获取包名的两种方式 1.uniapp云打包 这上面直接可以看到包名&#xff0c;可以修改&#xff0c;也可以在 manifest.json 文件中配置修改 package配置的就是包名&#xff0c;要确保唯一性 2.使用aapt工具获取 1.下载aapt工具&#xff0c;然后添加到环境变量…

如何更好的使用Copilot

Copilot从诞生到现在过去了挺长时间了&#xff0c;大家对Copilot的评价算是褒贬不一吧。有些人觉得Copilot高效且神奇&#xff0c;可以对自己的工作大大提效&#xff1b;有些觉得也就那样&#xff0c;为什么要花那么多钱做这个事情&#xff0c;钱它不香吗&#xff1f; 从最开始…

学习samba

文章目录 一、samba介绍二、samba的主要进程三、配置文件四、例子 一、samba介绍 1、SMB&#xff08;Server Message Block&#xff09;协议实现文件共享&#xff0c;也称为CIFS&#xff08;Common Internet File System&#xff09;。 2、是Windows和类Unix系统之间共享文件的…

Java 入门基础题

目录 1.输出一个整数的每一位 2.判定素数 3.求最大值方法的重载 4.输出闰年 5.打印 X 图形 6.数字9 出现的次数 7.计算分数的值 8. 模拟登陆 9.使用函数求最大值 10.斐波那契数列 星光不负赶路人&#xff0c;加油铁子们&#xff01;&#xff01;&#xff01; 1…

vscode使用flake8设置单行最长字符限制设置失败的问题

vscode使用flake8设置单行最长字符限制设置失败的问题 问题描述解决方案 问题描述 如图所示&#xff0c;使用flake8单行字数过长&#xff0c;就会有有红色底的波浪线 一般情况下很多教程都会让你在setting.json里面设置 但是我打开我的setting.json&#xff0c;发现我已经进…

基于SSM的供电所档案管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Android拖放startDragAndDrop拖拽Glide灵活加载堆叠圆角图,Kotlin(6)

Android拖放startDragAndDrop拖拽Glide灵活加载堆叠圆角图&#xff0c;Kotlin&#xff08;6&#xff09; Android拖放startDragAndDrop拖拽Glide加载堆叠圆角图&#xff0c;Kotlin&#xff08;5&#xff09;-CSDN博客文章浏览阅读1.3k次。&#xfeff;&#xfeff;Android Dyna…

服务器中了locked勒索病毒怎么处理,locked勒索病毒解密,数据恢复

近几年&#xff0c;网络应用技术得到了迅速发展&#xff0c;越来越多的企业开始走向数字化办公&#xff0c;极大地为企业的生产运营提供了帮助&#xff0c;但是网络技术的发展也为网络安全埋下隐患。最近&#xff0c;locked勒索病毒非常嚣张&#xff0c;几乎是每隔两个月就会对…

Python---集合中的交集 、并集 | 与差集 - 特性

用 & 来求两个集合的交集&#xff1a;-----键盘上的7上的符号&#xff0c;shift 7 同时按 用 | 来求两个集合的并集&#xff1a; -----键盘上的7上的符号&#xff0c;shift 同时按&#xff08;就是enter键上面那个|\ &#xff09; 用 - 来求两个集合的差集&#xff…

在IDEA中使用maven项目总结

一 什么是maven Maven本身也是Java写的&#xff0c;他是一款服务于Java平台的自动化构建工具 Maven是一个项目管理工具&#xff0c;旨在简化软件项目的构建、依赖管理和项目信息管理。它使用基于项目对象模型&#xff08;Project Object Model&#xff0c;POM&#xff09;的…

excel表的筛选后自动求和

一般都使用subtotal函数。 通过看一个大佬的视频&#xff0c;发现可以有更简单的方法。 首先任意筛选数据(ctrlshiftl)&#xff0c; 然后选中需要求和的列的最下方的空白单元格&#xff0c;再按alt。 回车即可。 实质它还是用的subtotal函数

拍摄视频的时候相机断电导致视频文件损坏,怎么修复

3-4 现在好多人都有自己的相机&#xff0c;但是专业用来录像的机器应该是不太可能都有的&#xff0c;相机的稳定性会比专业的机器差一些&#xff0c;如果用于比较重要的场景&#xff0c;比如婚庆、会议录像、家庭录像使用等&#xff0c;有较少的概率会出现一些奇怪的情况&…

Windows conan环境搭建

Windows conan环境搭建 1 安装conan1.1 安装依赖软件1.1.1 python安装1.1.2 git bash安装1.1.3 安装Visual Studio Community 20191.1.3.1 选择安装的组件1.1.3.2 选择要支持的工具以及对应的SDK 1.1.4 vscode安装 1.3 验证conan功能1.4 查看conancenter是否包含poco包1.5 查看…

Delphi TCP服务端监听端口获取客户端RFID网络读卡器上传的刷卡数据

本示例使用设备介绍&#xff1a;液显WIFI无线网络HTTP协议RFID云读卡器可编程实时可控开关TTS语-淘宝网 (taobao.com) unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ComCtrls, ScktComp, StdCtrls, ScktComp…

图像相似度对比方法

1.哈希方法&#xff0c;其中包括均值哈希、插值哈希、感知哈希方法。计算出图片的哈希值&#xff0c;一般使用汉明 距离计算两个图片间的差距。 2.直方图算法&#xff0c;其中包括灰度直方图算法&#xff0c;RGB直方图算法&#xff0c; 3.灰度图算法&#xff1a;MSE、SSIM、…

基于SpringBoot+Vue的宿舍管理系统

基于SpringBootVue的学生宿舍管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 宿舍公告 登录界面 管理员界面 维修人员 商家界面 学生界面 摘要 摘…

笔试题之指针和数组的精讲

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

数据分类分级方法及典型应用场景

1 2021-09-29 来源&#xff1a;数据学堂 [打印本稿][字号 大 中小] 《数据安全法》的第二十一条明确规定了由国家建立数据分类分级保护制度&#xff0c;根据数据在经济社会发展中的重要程度&#xff0c;以及一旦遭到篡改、破坏、泄露或者非法获取、非法利用&#xff0c;对国…

Unity中【UniTask异步流程】如何进行【步骤分段】、【步骤撤销】、【步骤跳转】、【取消异步任务】

一、UniTask和Task UniTask是Unity中的Task实现&#xff0c;Task是C#中实现异步操作的一个模块(类)。UniTask与Task有着同样的使用思路&#xff08;使用习惯&#xff0c;常用API等&#xff09;&#xff0c;可以说UniTask是借鉴Task而开发出来的。 二、需求的来源 以前有一个…