22. linux系统基础

news/2024/10/31 1:35:46/

递归遍历指定文件下所有的文件,而且你还可以统计一下普通文件的总个数,既然能统计普通文件,能统计其他文件吗?比如目录文件, 这个是main函数里面我们调用了 ,这个checkdird这个函数,需要传递一个路径,

 文件打开的目录,把路径 传进去,传进来以后,我这个路径,调用opendir打开,打开之后返回一个指向目录的一个指针,DIR *pDir  

 

 接下来在一个循环里面,循环读取目录项,如果这个不过滤会怎么样?每一个目录下都有它自己,会进入死循环,这个必须过滤掉,接下来进行判断,看一下这个文件是什么类型,如果说是这种目录DT_DIR 应该是递归, 有的人是不是没把这个加上49?如果没加上,他肯定是最多打开一层或者失败,
打开失败那个perror 就是说 没有这个文件或目录,然后拼接好以后,继续让他调自己,这个自己调用自己,在这里我们是直接或间接调用自己呀?在这里是直接调自己, 50这个是函数里面调自己,这个是直接调自己,那么它返回一个n值,n+= 是什么意思?是累加,一直累加,递归是一层一层的压栈,最后一层一层的出栈,递归有些场合不用递归不行,递归又不太提倡用,为什么呢?因为说如果压栈太深,有可能会照成栈溢出,但一般情况下,系统上你的目录 层能有多深呢? 你大概10层 你还能20层100层吗?

 如果是普通文件 n++就可以了,n++ 就是在统计普通文件的个数呀?

 函数,由这个返回,返回的是普通文件的总个数,记得要关闭这个目录,否则就会照成,我打开很多目录,是不是最后只能关闭一个呀?你这个函数checkdir他肯定打开的是带路径的,这个是不是可以用相对路径呢?你要知道这个相对路径是相对谁的呀?是当前目录,因为你这个目录是不是要切换呀?但是这个切换是不是只能往下切换呀?不能往上切换,演示一下,统计一下当前目录,看看有多少文件,25个吧?

 

 如果在统计目录的话,是不是在目录项在做个m++ 如果让你统计目录和文件一块来统计,这个返回值怎么说?这个参数你可以返回结构体可以吗?

因为这个return是不是 如果返回一个普通数据类型的话,是不是只能返回一个值呀?如果你想返回多个值,可以返回一个结构体,返回一个结构体指针,或者返回一个结构体,值传递是不是也可以呀?
但是你不能返回局部变量的引用,或者是指针吧,

两个文件符指向的相同的文件,无论你对他如何操作,读或写,都会引起文件指针的变化,那么这一个文件只有一个读写位置指针,你使用哪个文件描述符,都会引起它的变化,

dup2比dup要复杂一些,

 我们打开两个文件,newfd)指向argv[1] 也就是指向oldfd指向的文件,
这个里面有一个隐含的操作,如果说,我们在进行文件描述符复制的时候,如果这个newfd已经打开一个文件了,那么你做了28这么一个操作,很显然,newfd会把这个文件给关掉,然后再做文件描述符的复制,如果说这个newfd没有打开文件,没有关系,直接复制,当你进行了文件描述符的复制以后呢,那么内核当中会给你做隐性计数,这点有点类似硬连接,如果我仅仅是把这个newfd close掉,那么你这个文件有没有会真正的关闭掉?没有,那么你close一个文件描述符,只是说使这个文件描述符隐性计数减一,如果是0的时候这个文件是真正的关闭了,要仔细联想一下硬连接,跟那个原理是一模一样的,

 这个文件描述符STDOUT_FILENON,是不是它已经把这个把标准输出给打开了吧?因为我们的进程执行起来以后默认有3个打开的文件描述,分别是 标准输入 标准输出,和标准错误输出,这三个文件是打开的,跟我们刚才讲那个是不是类似?那个是我们手动打开,这个是进程刚刚已启动就打开了STDOUT_FILENON,,


http://www.ppmy.cn/news/29836.html

相关文章

操作系统(1.1)--引论

目录 一、操作系统的目标和作用 1.操作系统的目标 2.操作系统的作用 2.1 OS作为用户与计算机硬件系统之间的接口 2.2 OS作为计算机系统资源的管理者 2.3 0S实现了对计算机资源的抽象 3. 推动操作系统发展的主要动力 二、操作系统的发展过程 1.无操作系统的计算机系统…

笔记--学习mini3d代码

主要是记录学习mini3d代码时,查的资料; 从github下载的代码: GitHub - skywind3000/mini3d: 3D Software Renderer in 700 Lines !!3D Software Renderer in 700 Lines !! Contribute to skywind3000/mini3d development by creating an a…

etcd集群通过 Leader 写入数据,为什么K8s HA集群中讲每个 kube-apiserver 只和本机的 ETCD 通信

写在前面 对这个我不太明白,所有在 stackOverflow 的请教了大佬这里分享给小伙伴理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整…

Servlet详细教程

文章目录Servletservlet 简介Servlet 入门案例页面编写页面提交 get 请求Servlet 和 Tomcat 关系servlet-apiget 和 post 请求Servlet 生命周期案例HttpServletRequest 接口简介文件上传FileServlet 类Servlet servlet 简介 servlet 全称为 server applet 是服务器的小程序&am…

systemV共享内存

systemV共享内存 共享内存区是最快的IPC形式。共享内存的大小一般是4KB的整数倍,因为系统分配共享内存是以4KB为单位的(Page)!4KB也是划分内存块的基本单位。 之前学的管道,是通过文件系统来实现让不同的进程看到同一…

详解JAVA字节码

目录 1.概述 2.字节码文件构成 2.1.魔数 2.2.版本号 2.3.常量池 2.4.访问标志 2.5.索引 2.6.字段表 2.7.方法表 3.字节码指令 3.1.概述 3.2.指令分类 3.2.1.加载存储指令 3.2.2.运算指令 3.2.3.其他指令 3.3.完整指令工作流程 4.字节码保护 1.概述 以往的编程…

Ubuntu中安装StaMPS

Ubuntu中安装StaMPS0 StaMPS简介1 首先安装好MATLAB,安装一些依赖工具包2 安装StaMPS2.1 下载StaMPS安装包2.2 安装2.3 配置环境2.4 matlab中的路径设置0 StaMPS简介 官网:https://homepages.see.leeds.ac.uk/~earahoo/stamps/ A software package to e…

Vue项目中引入高德地图步骤详解

高德地图API官网:高德开放平台 | 高德地图API。 目录 一、案例效果 二、开发准备 1. 注册高德开放平台账号 2. 创建应用添加 key 值 三、项目中使用地图组件 1. npm 获取高德地图 API 2.在项目中新建 MapContainer.vue 文件,用作地图组件。 3.在…