IO、进程、线程03

news2024/9/23 3:17: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;
}

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

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

相关文章

MySQL学习记录 —— 이십일 MySQL服务器文件系统(1)

文章目录 1、配置和默认值2、系统变量和选项1、介绍2、常用选项3、如何使用系统变量 3、常用服务器配置4、查看状态变量5、MySQL数据目录 mysql的服务端就是mysqld&#xff0c;d就是daemon&#xff0c;守护进程的意思。 配置文件中[mysqld]部分时服务器支持的启动选项。服务器…

某航空制造业集团IT信息化总体规划方案

获取完整方案见下图 更多有关华为研发管理/IPD、MBSE、PLM、ERP、MES、数据治理、数字样机等方面免费解决方案、资料获取&#xff0c;请见下图

开放式耳机哪个品牌好?开放式耳机实用推荐

开放式耳机是一种耳机类型&#xff0c;其外壳是开放的&#xff0c;发声单元的背面和外界相通。这种耳机的外壳上通常有许多小孔或者直接能够看到内部的发声单元。 而且开放式耳机几乎摒弃了传统耳机几乎所有缺点&#xff01;&#xff01; ❌有线耳机&#xff1a;运动的时候特别…

如何走出低能量状态?

晚上好。 每个人都难免会有状态不佳的时候。可能是遭受压力&#xff0c;可能是事情不顺&#xff0c;也可能无缘无故、突然就陷入情绪的低谷之中。 这时&#xff0c;我们很容易感到精力不济&#xff0c;无精打采&#xff0c;明明有许多事情要做和想做&#xff0c;但总是提不起精…

宠物空气净化器哪款品牌好?口碑好的猫用空气净化器排名

猫咪每年掉毛两次&#xff0c;一次掉半年的现象真让人头疼。作为一位5年资深铲屎官&#xff0c;特别是在掉毛季节&#xff0c;猫毛无处不在&#xff0c;对此深有体会。宠物空气净化器已成为铲屎官们的救星&#xff0c;能迅速清理家中的宠物毛发和异味&#xff0c;是养猫家庭的必…

RK3568平台(环境篇)windon与ubuntu之间文件互传

一.windon与ubuntu共享文件夹 打开设置&#xff1a; 点击选项&#xff0c;共享文件夹 共享文件夹&#xff0c;就是在电脑的固定盘符下面&#xff0c;找一个文件夹为Windows和Linux都能看得见的共用的看得见的文件夹&#xff0c;点击添加文件夹。 点击确定后在ubuntu添加共享文…

python 获取Shopee虾皮商家店铺商品列表 虾皮api数据采集

此api接口可用于获取虾皮平台商家店铺的商品列表&#xff0c;目前land参数支持id、vn、my、th、sg、ph、tw&#xff08;印尼、越南、马来、泰国、新加坡、菲律宾、台湾&#xff09;。 若有需要&#xff0c;请点击文末链接联系我们。 详细采集页面如下https://shopee.tw/yuesh…

【快速逆向一/无过程/有源码】《大学》在线投稿系统

逆向日期&#xff1a;2024.07.18 使用工具&#xff1a;Node.js 加密工具&#xff1a;Crypto-js标准库 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 【点赞 收藏 关注 】仅供学习&#xff0c;仅供学习&#xff0c; 本文为快速逆向&#x…

IC测试:Shmooing, Shmoo测试, Shmoo图

Shmoo测试/Shmooing 在半导体测试中&#xff0c;Shmooing是一种测试技术&#xff0c;通过扫描一个范围内的测试条件参数来查看正在运行的被测器件&#xff0c;就像它在现实世界中的表现一样。 测试的参数类型取决于IC的目的和类型以及环境。至少绘制了两个参数。&#xff08;…

鸿蒙仓颉语言【基础-数据类型dataType】

数据类型 仓颉编程&#xff08;CangjieLang&#xff09;是强类型语言,变量和函数参数都需要显式声明类型&#xff0c;例如&#xff1a; public let growable: Bool false public func get(value: Array<Byte>): Int64。基础数据类型 仓颉&#xff08;CangjieLang&…

生命周期的妙用——Vue3

Vue3的生命周期 从Vue2到Vue3&#x1f47e;不只onMounted又见keep-alive主要属性被你包裹应用场景 ) 从Vue2到Vue3&#x1f47e; Vue 3 保留了大多数 Vue 2 的生命周期钩子&#xff0c;同时引入了组合 API 中的生命周期钩子。以下是 Vue 3 中的生命周期钩子&#xff1a; 不…

R语言进行集成学习算法:随机森林

# 10.4 集成学习及随机森林 # 导入car数据集 car <- read.table("data/car.data",sep ",") # 对变量重命名 colnames(car) <- c("buy","main","doors","capacity","lug_boot","safety"…

linux下JDK的安装

前言&#xff1a; 安装部署java开发的代码都需要java环境&#xff0c;这里记录下linux下JDK的安装过程&#xff0c;仅供学习参考。 JDK的下载 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads 选择和操作系统匹配的版本进行下载 查看操作系统&…

记录些MySQL题集(11)

MySQL 组提交原理 MySQL 中事务的两阶段提交保证了 redo log 与 binlog 两种日志文件的数据一致性&#xff0c;但是并发事务场景下还需要保证事务顺序的一致性&#xff0c;因此通过组提交机制在保证顺序一致性的前提下提高写入效率。因此组提交是两阶段提交的一部分。 两阶段…

JavaScript基础(十五)

变量&返回值 js中的变量有两种: 局部变量和全局变量 全局变量: 在函数外声明的变量&#xff0c;网页上的所有函数和脚本都能访问它。 局部变量&#xff1a; 在函数内部声明的变量&#xff08;必须使用var&#xff09;&#xff0c;只能在函数内部访问它&#xff0c;我们…

区分C语言中的全局变量和java中的类的变量

该程序运行结果&#xff1a; 原因&#xff1a; new Homework08().count1();中改变的count的值是该对象的count变量&#xff0c; 但是Homework08 t1 new Homework08(); t1.count2(); t1.count2();改变的都是t1变量的count的值 //20224.07.16public class Homework08 {public …

在组件中显示tuku的照片

一、问题 &#xff08;1&#xff09;错误&#xff1a;域名前面一定要加http://要不然会报错 &#xff08;2&#xff09;在使用 defineModel传值时一定要动态绑定&#xff0c;要不然图片不显示 &#xff08;3&#xff09;改完后在商品列表中显示图片信息必须 在显示的图片中取…

ARM体系结构和接口技术(六)KEY按键实验① 按键轮询检测

文章目录 一、按键轮询&#xff08;一&#xff09;分析按键的电路连接1. 按键原理图2. 按键消抖 二、分析芯片手册&#xff08;一&#xff09; GPIO章节&#xff08;二&#xff09;RCC章节 三、代码&#xff08;一&#xff09;key.c&#xff08;二&#xff09;key.h 一、按键轮…

基于python的笔记本电脑购买意愿影响因素分析,包括情感分析和聚类分析

摘要&#xff1a;本论文基于Python大数据视角&#xff0c;旨在分析笔记本电脑购买意愿的影响因素。通过爬取京东网站上的评论数据&#xff0c;使用多种技术和工具进行数据分析和处理。使用requests库爬取了大量的在线评论数据。利用pandas对数据进行清洗、处理和统计&#xff0…

实况:老菜鸟自力更生从零开始重学spring目标是画出一张唬人大图(三、spring启动的入口搭建源码阅读环境)

前情提要&#xff1a;源码下载&编译 速览 设计一个最简单的spring项目spring的入口在哪&#xff1f;怎么启动的&#xff1f;搭建源码阅读环境新建module并添加依赖编写一个微型spring项目&#xff08;配置bean->获取bean->使用bean&#xff09; 不打无准备之仗&…