当前位置: 首页 > ai >正文

902作业

1.

#include<myhead.h>
int main(int argc, const char *argv[])
{pid_t pid = -1;int fd1 = -1;int fd2 = -1;int num=0;ssize_t s;if (argc!=3){printf("输入格式错误\n");return -1;}pid = fork();if ((fd1 = open(argv[1],O_RDONLY))==-1){printf("源文件打开失败\n");return -1;}printf("源文件打开成功\n");off_t len = lseek(fd1,0,SEEK_END);lseek(fd1,0,SEEK_SET);close(fd1);if (pid>0){printf("父进程:%d,拷贝前一半的内容\n",getpid());if ((fd1 = open(argv[1],O_RDONLY))==-1){printf("源文件打开失败\n");return -1;}printf("源文件打开成功\n");if ((fd2 = open(argv[2],O_RDWR|O_CREAT|O_TRUNC))==-1){printf("目标文件打开失败\n");return -1;}printf("目标文件打开成功\n");char str[128]="";while (num<(len/2)&&(s=read(fd1,str,sizeof(str)>(len/2-num)?(len/2-num):sizeof(str)))!=0){write(fd2,str,s);num=s+num;bzero(str,sizeof(str));}close(fd1);close(fd2);wait(NULL);printf("已经成功回收\n");}else if (pid==0){num=0;printf("子进程:%d,拷贝后一半的内容\n",getpid());if ((fd1 = open(argv[1],O_RDONLY))==-1){printf("源文件打开失败\n");return -1;}printf("源文件打开成功\n");if ((fd2 = open(argv[2],O_WRONLY|O_CREAT|O_APPEND))==-1){printf("目标文件打开失败\n");return -1;}printf("目标文件打开成功\n");lseek(fd1,len/2,SEEK_SET);lseek(fd2,len/2,SEEK_SET);char str[128]="";while (num<(len-(len/2))&&(s=read(fd1,str,sizeof(str)>(len/2-num)?(len/2-num):sizeof(str)))!=0){write(fd2,str,s);num=s+num;bzero(str,sizeof(str));}printf("子进程已拷贝\n");close(fd1);close(fd2);exit(EXIT_SUCCESS);}return 0;
}

2.

#include<myhead.h>
int main(int argc, const char *argv[])
{pid_t pid1 = -1;int fd1 = -1;int fd2 = -1;int num=0;ssize_t s;if (argc!=3){printf("输入格式错误\n");return -1;}pid1 = fork();if ((fd1 = open(argv[1],O_RDONLY))==-1){printf("源文件打开失败\n");return -1;}printf("源文件打开成功\n");off_t len = lseek(fd1,0,SEEK_END);lseek(fd1,0,SEEK_SET);close(fd1);if (pid1>0){pid_t pid2 = fork();if (pid2>0){printf("等待两个子进程的完成\n");	waitpid(pid1,NULL,0);waitpid(pid2,NULL,0);printf("已经成功回收\n");}else if(pid2==0){printf("pid2子进程:%d,拷贝前一半的内容\n",getpid());if ((fd1 = open(argv[1],O_RDONLY))==-1){printf("源文件打开失败\n");return -1;}printf("源文件打开成功\n");if ((fd2 = open(argv[2],O_RDWR|O_CREAT|O_TRUNC))==-1){printf("目标文件打开失败\n");return -1;}printf("目标文件打开成功\n");char str[128]="";while (num<(len/2)&&(s=read(fd1,str,sizeof(str)>(len/2-num)?(len/2-num):sizeof(str)))!=0){write(fd2,str,s);num=s+num;bzero(str,sizeof(str));}close(fd1);close(fd2);exit(EXIT_SUCCESS);}}else if (pid1==0){num=0;printf("子进程:%d,拷贝后一半的内容\n",getpid());if ((fd1 = open(argv[1],O_RDONLY))==-1){printf("源文件打开失败\n");return -1;}printf("源文件打开成功\n");if ((fd2 = open(argv[2],O_WRONLY|O_CREAT|O_APPEND))==-1){printf("目标文件打开失败\n");return -1;}printf("目标文件打开成功\n");lseek(fd1,len/2,SEEK_SET);lseek(fd2,len/2,SEEK_SET);char str[128]="";while (num<(len-(len/2))&&(s=read(fd1,str,sizeof(str)>(len/2-num)?(len/2-num):sizeof(str)))!=0){write(fd2,str,s);num=s+num;bzero(str,sizeof(str));}printf("子进程已拷贝\n");close(fd1);close(fd2);exit(EXIT_SUCCESS);}return 0;
}

http://www.xdnf.cn/news/19671.html

相关文章:

  • @Value注解底层原理(二)
  • Redis 的整数集合:像分类收纳盒一样的整数专属存储
  • Obsidian本地笔记工具:构建知识网络关联笔记,支持Markdown与插件生态及知识图谱生成
  • LoRA至今历程回顾(74)
  • 《水浒智慧》第二部 “英雄是怎么炼成的” (上篇)读书笔记
  • Linux文本处理工具
  • 机器算法(五)模型选择与调优
  • 基于SpringBoot的广科大在线图书管理系统设计与实现(代码+数据库+LW)
  • 探索JavaScript机器学习:几款流行的库推荐
  • Leetcode 3670. Maximum Product of Two Integers With No Common Bits
  • HTML第四课:个人简介页面开发
  • 下载速度爆表,全平台通用,免费拿走!
  • DaemonSet Job CronJob 概念理解
  • XML在线格式化 - 加菲工具
  • Leetcode二分查找(3)
  • 移动硬盘删除东西后,没有释放空间
  • 【机器学习入门】5.2 回归的起源——从身高遗传到线性模型的百年演变
  • 狄利克雷分布作用
  • CentOS 创建站点
  • 二进制流进行预览pdf、excel、docx
  • Cisco FMC利用sftp Server拷贝文件方法
  • 0902 C++类的匿名对象
  • 面试问题:c++的内存管理方式,delete的使用,vector的resize和reverse,容量拓展
  • uni-app 布局之 Flex
  • 基于STM32与华为云联动的智能电动车充电桩管理系统
  • QSlider 和 QProgressBar 的区别与实践
  • 【Linux基础】Linux系统启动:深入解析Linux系统启动完整流程
  • 仿真波导中超短脉冲传输中的各种非线性效应所产生的超连续谱
  • AI如何理解PDF中的表格和图片?
  • qt安装FFmpeg后编译遇到error: collect2.exe: error: ld returned 1 exit status错误