2024/4/3 IOday5

1:实现文件夹的拷贝功能
    注意判断被拷贝的文件夹是否存在,如果不存在则提前创建,创建文件夹的函数为 mkdir
    不考虑递归拷贝的问题

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/wait.h>
#include <pthread.h>
#include <dirent.h>
int main(int argc, const char *argv[])
{DIR* fd1=opendir("./file1");//打开被复制文件夹if(fd1==NULL){perror("opendir");if(mkdir("./file1",S_IRWXU|S_IRWXG|S_IRWXO)==-1){perror("mkdir");return -1;}}DIR* fd2=opendir("./file2");//打开目的文件夹if(fd2==NULL){perror("opendir");if(mkdir("./file2",S_IRWXU|S_IRWXG|S_IRWXO)==-1){perror("mkdir");return -1;}}	while(1){//循环读取文件夹,循环文件printf("111111\n");struct dirent *filedir=readdir(fd1);//读取文件夹内容if(filedir==NULL){return 0;}printf("33333\n");char buf[256]={0};//定义字符数组存储文件夹中文件名memset(buf,0,sizeof(buf));strcpy(buf,"./file1/");printf("444\n");strcat(buf,filedir->d_name);//复制文件名到字符数组if(strcmp(buf,"./file1/.")&&strcmp(buf,"./file1/..")){printf("%s\n",buf);int fp1=open(buf,O_RDONLY);//文件IOchar buf2[256]={0};strcpy(buf2,"./file2/");strcat(buf2,filedir->d_name);printf("%s\n",buf2);int fp2=open(buf2,O_WRONLY|O_CREAT|O_TRUNC,0664);//在文件夹file2中创建file1中文件char str[20]={0};	while(1){//循环文件内容printf("22222\n");   int res=read(fp1,str,20);//从文件fp1中读放到字符数组str中if(res==0){break;}write(fp2,str,res);//从str写到文件fp2中}close(fp1);close(fp2);}if(filedir==NULL){break;}//文件夹读取到NULL结束}closedir(fd1);closedir(fd2);return 0;
}

2:有如下结构体 struct Student{

                    char name[20];

                     int age;

                     double math_score;

                     double chinese_score;

                     double english_score;

                     double physical_score;

                     double chemical_score;

                     double biological_score; } 申请一个该结构体数组,使用 fprintf / fscanf,将该结构体数组中的所有数据,写入文件中,然后重新加载到数组中 同样的操作,使用fwrite/fread 和 write/read再做一遍

一:用fprintf和fscanf写

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/wait.h>
#include <pthread.h>
#define MAX 3
typedef struct student 
{char name[20];int age;double math_score;double chinese_score;double english_score;double physical_score;double chemical_score;double biological_score;
}s_student;
int main(int argc, const char *argv[])
{//定义结构体数组arrs_student arr[MAX]={{"陈丽",18,100,98,95,93,89,94},{"李华",20,72,84,68,79,94,99},{"张三",19,78,46,98,74,100,76}};FILE* fp=fopen("./student.txt","w");int i=0;while(i<MAX){fprintf(fp,"%s %d %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf\n",arr[i].name,arr[i].age,arr[i].math_score,arr[i].chinese_score,arr[i].english_score,arr[i].physical_score,arr[i].chemical_score,arr[i].biological_score);i++;}fclose(fp);FILE* fp1=fopen("./student.txt","r");s_student arr2[MAX];int j=0;while(1){int res=fscanf(fp1,"%s %d %lf %lf %lf %lf %lf %lf\n",arr2[j].name,&arr2[j].age,&arr2[j].math_score,&arr2[j].chinese_score,&arr2[j].english_score,&arr2[j].physical_score,&arr2[j].chemical_score,&arr2[j].biological_score);if(res<0){break;}printf("%s %d %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf\n",arr2[j].name,arr2[j].age,arr2[j].math_score,arr2[j].chinese_score,arr2[j].english_score,arr2[j].physical_score,arr2[j].chemical_score,arr2[j].biological_score);j++;}fclose(fp1);return 0;}

二:用read和write写

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <unistd.h>  
#include <fcntl.h>  // 定义Student结构体  
struct Student {  char name[20];  int age;  double math_score;  double chinese_score;  double english_score;  double physical_score;  double chemical_score;  double biological_score;  
};  int main() {  // 定义并初始化一个Student结构体数组  struct Student students[3] = {  {"Alice", 20, 85.5, 90.0, 88.0, 75.0, 80.0, 82.0},  {"Bob", 21, 90.0, 85.0, 80.0, 70.0, 75.0, 77.0},  {"Charlie", 19, 80.0, 88.0, 75.0, 65.0, 70.0, 72.0}  };  // 打开文件用于写入  int fd = open("students.bin", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);  if (fd == -1) {  perror("Error opening file for writing");  return EXIT_FAILURE;  }  // 将结构体数组写入文件  size_t size = sizeof(struct Student);  for (int i = 0; i < 3; i++) {  ssize_t written = write(fd, &students[i], size);  if (written != size) {  perror("Error writing to file");  close(fd);  return EXIT_FAILURE;  }  }  // 关闭文件  close(fd);  // 定义另一个Student结构体数组用于读取数据  struct Student new_students[3];  // 打开同一个文件用于读取  fd = open("students.bin", O_RDONLY);  if (fd == -1) {  perror("Error opening file for reading");  return EXIT_FAILURE;  }  // 从文件中读取数据到另一个结构体数组  for (int i = 0; i < 3; i++) {  ssize_t read_bytes = read(fd, &new_students[i], size);  if (read_bytes != size) {  perror("Error reading from file");  close(fd);  return EXIT_FAILURE;  }  }  // 关闭文件  close(fd);  // 打印读取的数据以验证  for (int i = 0; i < 3; i++) {  printf("Name: %s, Age: %d\n", new_students[i].name, new_students[i].age);  // 打印其他分数...  }  return 0;  
}

3:创建一对父进程,在父进程能够向子进程发送消息的基础上发 同时子进程也能够向父进程发送消息

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <unistd.h>  
#include <sys/types.h>  
#include <sys/wait.h>  #define BUFFER_SIZE 1024  int main() {  int fd_to_child[2]; // 父进程到子进程的管道  int fd_to_parent[2]; // 子进程到父进程的管道  pid_t pid;  char buffer[BUFFER_SIZE];  // 创建两个管道  if (pipe(fd_to_child) == -1 || pipe(fd_to_parent) == -1) {  perror("pipe");  exit(EXIT_FAILURE);  }  // 创建子进程  pid = fork();  if (pid == -1) {  perror("fork");  exit(EXIT_FAILURE);  }  if (pid == 0) { // 子进程  // 关闭父进程到子进程的写端和子进程到父进程的读端  close(fd_to_child[1]);  close(fd_to_parent[0]);  // 从父进程接收消息  read(fd_to_child[0], buffer, BUFFER_SIZE);  printf("Child received: %s\n", buffer);  // 向父进程发送消息  const char *msg_to_parent = "Hello from child!";  write(fd_to_parent[1], msg_to_parent, strlen(msg_to_parent) + 1);  // 关闭管道文件描述符  close(fd_to_child[0]);  close(fd_to_parent[1]);  exit(EXIT_SUCCESS);  } else { // 父进程  // 关闭父进程到子进程的读端和子进程到父进程的写端  close(fd_to_child[0]);  close(fd_to_parent[1]);  // 向子进程发送消息  const char *msg_to_child = "Hello from parent!";  write(fd_to_child[1], msg_to_child, strlen(msg_to_child) + 1);  // 从子进程接收消息  read(fd_to_parent[0], buffer, BUFFER_SIZE);  printf("Parent received: %s\n", buffer);  // 关闭管道文件描述符  close(fd_to_child[1]);  close(fd_to_parent[0]);  // 等待子进程结束  wait(NULL);  }  return 0;  
}

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

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

相关文章

计算机视觉入门

计算机视觉&#xff08;Computer Vision&#xff09;是一门涉及使机器能够从图像或者多维数据中提取信息&#xff0c;解释、理解并对物体或场景进行处理的学科。以下是一个基本的计算机视觉入门学习路线&#xff0c;旨在为刚刚接触这一领域的学习者提供指导。 1. 基础知识储备…

数据安全之认识数据库审计系统

随着企业业务数据量的不断增长和数据存储的集中化&#xff0c;数据库成为企业的核心资产之一。然而&#xff0c;数据库面临着各种安全威胁&#xff0c;如SQL注入、权限滥用、数据泄露等。为了保障数据库的安全性和完整性&#xff0c;企业需要采取有效的审计措施来监控和记录数据…

总包不足80w的高龄Android程序员,被面试官diss混得太差,网友狂吐槽……

有网友直言&#xff1a;90%的人一辈子一年也拿不到80万 有网友分析到&#xff1a;看面试情况&#xff0c;没什么希望就直接其实我觉得30岁年薪低于1000万的都是loser&#xff0c;你我都是 有网友说&#xff1a;这几年互联网行业极大发展&#xff0c;让互联网行业成为了明星行…

394.字符串解码

题目&#xff1a;给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的&#xff1b;输入字符串中没有额外的空…

有关介绍CVPR‘2024工作《持续学习的无干扰低秩适应》正式实施

一个不知名大学生&#xff0c;江湖人称菜狗 original author: Jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2024.04.03 Last edited: 2024.04.03 代码&#xff1a;GitHub - liangyanshuo/InfLoRA&#xff1a;CVPR2024 工作 Interference-Free Low-Rank A…

jenkins插件集成api使用

jenkins配置插件&api使用 jenkins https://mirrors.jenkins.io/war-stable/2.222.1/ 包下载地址 jenkins镜像源修改 sed -i s/https:\/\/www.google.com/https:\/\/www.baidu.com/g default.json sed -i s/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.…

slam数学补充

协方差矩阵的计算 M(p̃ − μ)(p̃ − μ) T / (n1) μ Σ p̃ / (n1) 协方差矩阵的意义 以及 特征向量和特征值的关系 从数据表面看&#xff1a; 当M(n,n)过大意味着在数据均值的n维上变化较大&#xff0c;反之M(n,n)过小意味着数据在均值 的n维上变化不大。 当M(n,m)过…

教你快速认识Java中的抽象类和接口

目录 引言 抽象类&#xff08;Abstract Class&#xff09; 抽象类的概念 抽象类的图标 抽象类的语法 抽象类的特点 接口&#xff08;Interface&#xff09; 接口的概念 接口的图标 接口的语法 接口的特点 接口的使用 接口的意义 抽象类与接口的区别 Object类 结…

VMware配置环境(安装运行问题)及系列dns端口网络类型IP远程连接学习之(详谈8000字)

安装vmware快速配置步骤 下载VMware安装包 在下载好VMware安装包之后双击运行 接受条款 关闭VMware自动更新 勾选快捷键方式 安装VMware安装 输入许可证&#xff08;有需要私信小编&#xff09; 安装完成 重启电脑即可 最终成功界面: 安装Linux系统 创建虚拟机 选择…

递归实现排列型枚举(acwing)

题目描述&#xff1a; 把 1∼n 这 n 个整数排成一行后随机打乱顺序&#xff0c;输出所有可能的次序。 输入格式&#xff1a; 一个整数 n。 输出格式&#xff1a; 按照从小到大的顺序输出所有方案&#xff0c;每行 1 个。 首先&#xff0c;同一行相邻两个数用一个空格隔开…

在同一个局域网如何共享打印机和文件

1.在连接了打印机的主机上设置 1.1启用windows共享 打开网络与共享中心&#xff0c;点击“更改高级共享设置” 选择&#xff1a; “启用网络发现”“启用文件和打印机共享”“启用共享以便可以访问网络的用户可以读取和写入公用文件夹中的文件” 打开控制面板&#xff0c;选…

使用idea 调试HashMap时出现ExpiringCache

问题背景&#xff1a; 调试HashMap源码验证是在第一次put才创建table时&#xff0c;发现刚new出来HashMap表的size已经有值了&#xff1f;&#xff01;&#xff01;而且都是关于ExpiringCache之类的 解决办法&#xff1a; 开启调试前只在main方法里打断点&#xff0c;程序启动…