IO、进程、线程03

第一题:预习 opendir 和 readdir函数
opendir 和 readdir 是两个在C语言(特别是使用POSIX标准的系统,如Linux和UNIX)中用于目录遍历的函数。这两个函数属于标准的C库中的目录操作部分,通常与<dirent.h>头文件一起使用。下面详细介绍这两个函数的作用和用法。
opendir 函数
opendir 函数用于打开一个目录流,以便通过 readdir 函数读取目录内容。
函数原型:
#include <dirent.h>
#include <sys/types.h> DIR *opendir(const char *name);
参数:
name:指向以null结尾的字符串的指针,该字符串指定了要打开的目录的路径。
返回值:
- 成功时,返回一个指向
DIR类型的指针,该指针代表打开的目录流。 - 失败时,返回
NULL,并设置errno以指示错误。
readdir 函数
readdir 函数用于读取目录流中的下一个目录项。
函数原型:
#include <dirent.h> struct dirent *readdir(DIR *dirp);
参数:
dirp:指向之前通过opendir函数打开的目录流的指针。
返回值:
- 成功时,返回一个指向
dirent结构的指针,该结构包含目录项的信息。 - 读取到目录末尾或出错时,返回
NULL。要区分这两种情况,可以检查errno或使用errno的包装函数,如feof(dirfd(dirp))(但注意,feof并不直接适用于目录流,这里只是提供一个类比)。实际上,当到达目录末尾时,errno不会被设置。
第二题:通过 opendir、readdir、write、read函数实现拷贝一个文件夹中的所有文件的功能(不考虑文件夹中还有文件夹的情况)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;int main(int argc, const char *argv[])
{if(access(argv[2],F_OK) == -1)//判断目标文件夹是否存在{mkdir(argv[2],0777);//不存在则创建目标文件夹}else//如果存在,则需要判断该文件是否为目录文件{struct stat buf={0};stat(argv[2],&buf);mode_t mode=buf.st_mode;if(S_ISDIR(mode) != 1){fprintf(stderr,"该文件不是一个目录文件!\n");return 1;}}DIR* df=opendir(argv[1]);if(dp == NULL){perror("opendir");return 1;}while(1){struct dirent* dt=readdir(df);if(dt == NULL){break;}if(strcmp(dt->d_name,".")==0 || strcmp(dt->d_name,"..")==0){continue;}chdir(argv[1]);//把工作目录切换到argv[1]里面int rfd=open(dt->d_name,O_RDONLY);if(rfd == -1){perror("ropen");}chdir("..");//把工作目录切换到上一级目录chdir(argv[2]);int wfd=open(dt->d_name,O_WRONLY | O_CREAT | O_TRUNC,0666);if(wfd == -1){perror("wopen");}chdir("..");while(1){char s[16]={0};int res=read(rfp,s,15);if(res == 0){breaak;}write(wfp,s,strlen(buf));}}close(rfp);close(wfp);closedir(df);return 0;
}
相关文章:
IO、进程、线程03
第一题:预习 opendir 和 readdir函数 opendir 和 readdir 是两个在C语言(特别是使用POSIX标准的系统,如Linux和UNIX)中用于目录遍历的函数。这两个函数属于标准的C库中的目录操作部分,通常与<dirent.h>头文件一…...
算法力扣刷题记录 五十二【617.合并二叉树】
前言 二叉树篇,继续。 记录 五十二【617.合并二叉树】 一、题目阅读 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要…...
Java中的ArrayList和LinkedList有什么区别?
Java中的ArrayList和LinkedList是两种常用的集合实现类,它们都属于Java集合框架的一部分,但它们在内部实现、性能特点、使用场景等方面存在明显的区别。以下是对这两种集合的详细比较: 1. 数据结构差异 ArrayList:ArrayList是动…...
Linux C++ 058-设计模式之解释器模式
Linux C 058-设计模式之解释器模式 本节关键字:Linux、C、设计模式、解释器模式 相关库函数: 概念 解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。 解释器模式用于构建一…...
MDK5没有DeviceName
遇到的问题是Jlink驱动问题 不是引脚接反 使用国产GD单片机不同的工程,有的有Device Name,有的没有Device Name(下图是弄好的情况,有Device Name) 硬件链接,和设备都没有问题:无法仿真,无法下…...
在LabVIEW中实现图像矫正
在LabVIEW中实现图像矫正,特别是将倾斜的笔记本图像(如左图)校正为正视图像(如右图),通常需要以下几个步骤: 1. 获取图像 使用图像采集设备或加载图像文件来获取图像数据。 2. 图像预处理 对…...
Apache httpd-vhosts.conf 配置详解(附Demo)
目录 前言1. 基本配置2. http和https3. 重定向和代理配置4. 实战前言 Nginx的相关配置推荐阅读:Nginx将https重定向为http进行访问的配置(附Demo) 1. 基本配置 httpd-vhosts.conf 是 Apache HTTP Server 配置虚拟主机(Virtual Hosts)的文件 虚拟主机允许在一台服务器上…...
活动回顾 | AutoMQ 联合 GreptimeDB 共同探讨新能源汽车数据基础设施
7 月 13 日,AutoMQ 携手 GreptimeDB“新能源汽车数据基础设施” 主题 meetup 在上海圆满落幕。本次论坛多角度探讨如何通过创新的数据管理和存储架构,提升汽车系统的性能、安全性和可靠性,从而驱动行业的持续发展和创新,涵盖 Auto…...
格式工厂转换视频分辨率
1、下载和安装 http://www.pcfreetime.com/formatfactory/CN/index.html 2、打开视频 3、设置分辨率等参数 也可以选择保持原分辨率 4、执行导出 5、打开输出所在位置...
ReAct 大模型提示框架
你可能不熟悉 ReAct,这是一个旨在增强语言模型 (LLM) 决策能力的尖端框架。 通过使用新的观察结果更新 LLM 的上下文窗口并提示其重新评估信息,ReAct 促进了类似于人类思维过程的推理水平,超越了诸如思维链提示之类的旧技术。 在本文中&…...
JavaEE:Lombok工具包的使用以及EditStarter插件的安装
Lombok是一个Java工具库,通过添加注解的方式,简化Java的开发。 目录 1、引入依赖 2、使用 3、原理解释 4、更多使用 5、更快捷的引入依赖 1、引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lomb…...
基于纹理和统计图像特征集成的计算机辅助乳腺癌检测
诊断通常使用组织病理学切片,可以确定组织是否处于导管原位癌(DCIS)阶段,其中癌细胞尚未扩散到周围乳腺组织,或浸润性导管癌(IDC)阶段,其中细胞已渗透到邻近组织。对于医生来说,检测IDC非常耗时且具有挑战性。因此&…...
Java基础 - 简介和配置环境变量
目录 一. 简介 二. 开发环境配置 下载JDK 配置环境变量 Java_Home配置, Path 配置 CLASSPATH 配置 三. 编辑器选择 1.JetBrains 2. Eclipse 3.vscode 下载vscode 安装 vscode插件 四. 总结 一. 简介 Java 是由 Sun Microsystems 公司(后被 Oracle 收…...
水域救援装备的详细简介_鼎跃安全
水域救援行动需要救援人员配备全面、专业的装备,以应对各种复杂的水域环境和救援任务。水域救援套装应运而生,它集合了水域救援所需的各类关键装备,为救援人员提供全方位的保护和辅助,确保数援行动的高效与安全。 水域救援头盔&am…...
二、BIO、NIO、直接内存与零拷贝
一、网络通信编程基础 1、Socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,是一组接口,由操作系统提供; Socket将复杂的TCP/IP协议处理和通信缓存管理都隐藏在接口后面,对用户来说就是使用简单的接口进行网络应用编程…...
生成式AI的发展方向:Chat vs Agent
一、整体介绍 生成式AI作为人工智能领域的重要分支,近年来取得了显著进展,并在多个领域展现出巨大潜力。其核心在于通过机器学习和深度学习算法,从大量数据中学习规律和特征,进而生成具有创新性和多样性的文本、图像、音频和视频…...
吴恩达深度学习笔记:机器学习策略(2)(ML Strategy (2)) 2.9-2.10
目录 第三门课 结构化机器学习项目(Structuring Machine Learning Projects)第二周:机器学习策略(2)(ML Strategy (2))2.9 什么是端到端的深度学习?(What is end-to-end deep learning?&#x…...
变频空调介绍
直流变频空调:只有压缩机是直流变频的,而室外机风电机和室内机风电机都是定频的。 全直流变频空调:它的压缩机是直流变频的,并且室外机风机和室内机风机都是直流变频的。因为大三部件一个不漏,所以就叫做全直流变频。…...
C语言实现二叉树以及二叉树的详细介绍
目录 1.树概念及结构 1.1树的概念 1.2树的相关概念 1.3树的表示 2.二叉树概念及结构 2.1二叉树的概念 2.2特殊的二叉树 2.3二叉树的性质 2.4二叉树的存储结构 3.二叉树顺序结构--特殊的二叉树--堆及其实现 3.1堆的概念及结构 3.2堆的实现 3.2.1堆的结构 3.2.2堆…...
VScode:前端项目中yarn包的安装和使用
一、首先打开PowerShell-管理员身份运行ISE 输入命令: set-ExecutionPolicy RemoteSigned 选择“全是”,表示允许在本地计算机上运行由本地用户创建的脚本,没有报错就行了 二、接着打开VScode集成终端,安装yarn插件 输入 npm ins…...
CANN hcomm通道获取API
HcclChannelAcquire 【免费下载链接】hcomm HCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。 项目地址: https://gitcode.com/cann/hcomm 产品支持情况 Ascend 950PR/Ascend 950DT:支…...
从密码学论文到实战:聊聊Renyi散度为啥成了安全证明的‘香饽饽’
从密码学论文到实战:Renyi散度为何成为安全证明的核心工具 密码学研究者们最近几年在论文中频繁引用一个看似晦涩的概念——Renyi散度。如果你正在阅读格密码或后量子密码相关的安全证明,这个词几乎无处不在。但为什么这个诞生于上世纪60年代的信息论概念…...
技术解密:如何从零构建开源贴片机的完整指南
技术解密:如何从零构建开源贴片机的完整指南 【免费下载链接】lumenpnp The LumenPnP is an open source pick and place machine. 项目地址: https://gitcode.com/gh_mirrors/lu/lumenpnp 在电子制造领域,贴片机一直是小型创客和硬件开发者难以企…...
告别Resources和AssetBundle!用Unity Addressable重构你的资源管理(附迁移实战)
Unity Addressable系统深度重构:从传统资源管理到现代化架构的平滑迁移 在Unity项目开发中,资源管理一直是困扰开发者的核心难题之一。随着项目规模扩大,传统的Resources加载和AssetBundle管理方案逐渐暴露出性能瓶颈、热更新困难、依赖管理复…...
ArcMap新手必看:手把手教你给‘无家可归’的图层安个‘家’(Define Projection保姆级教程)
ArcMap坐标系急救指南:从“Unknown”到精确定位的完整解决方案 引言:当图层变成“流浪者”时 第一次在ArcMap中看到图层属性显示“Unknown”或“Undefined”时,很多新手会陷入困惑——这些数据明明有坐标数值,为什么软件却无法识别…...
保姆级教程:在小米/华为手机上从零安装AidLux,并解决首次启动卡顿问题
保姆级教程:在小米/华为手机上从零安装AidLux,并解决首次启动卡顿问题 对于移动端开发者和AI爱好者来说,在安卓手机上运行Linux环境一直是个痛点。AidLux作为一款创新的跨生态AI应用开发平台,完美解决了这一需求。本文将针对小米和…...
基于MYC-Y6ULX-V2核心板的工业运动控制系统实践
1. 项目概述:当工业运动控制遇上嵌入式核心板在工业自动化领域,运动控制系统是驱动设备精确执行动作的“大脑”和“神经中枢”。从数控机床的精密加工,到机器人的流畅轨迹,再到包装产线的快速分拣,其核心都依赖于一个稳…...
小米路由器4A千兆版刷机翻车实录:从Breed救砖到完美刷入Padavan固件全记录
小米路由器4A千兆版救砖实战:从硬件识别到Padavan固件完美适配 深夜的台灯下,我盯着桌面上那台已经变砖的小米路由器4A千兆版,USB转TTL模块的指示灯微弱地闪烁着。这已经是本周第三次尝试救砖了——前两次要么是夹子接触不良导致校验失败&…...
串口屏三大主流方案的多维度比较
全球串口屏市场正处于稳步增长通道。据行业研究机构数据,2025年全球串口屏市场规模约6.0亿美元,预计到2030年将增长至6.9亿美元,年复合增长率约5.6%。越来越多的中小设备制造商面临同一个问题:如何在预算和开发周期内,…...
手把手教你:在STM32F103C8T6上搞定ST25R3911B NFC读卡器(基于RFAL V2.8.0)
在STM32F103C8T6上实现ST25R3911B NFC读卡器的完整移植指南 对于嵌入式开发者来说,将NFC功能集成到资源受限的MCU上是一项常见但充满挑战的任务。本文将详细介绍如何在STM32F103C8T6这款经典Cortex-M3 MCU上,成功移植ST25R3911B NFC读卡器驱动和RFAL库(V…...
