首页 > 其他分享 >坐牢二十天 20240731(IO)

坐牢二十天 20240731(IO)

时间:2024-07-31 20:56:04浏览次数:14  
标签:return 二十天 20240731 int len fd1 fd2 IO 拷贝

一.作业

1> 使用父子进程完成两个文件的拷贝

父进程拷贝前一半内容,子进程拷贝后一半内容

子进程结束后退出,父进程回收子进程的资源

#include <myhead.h>
//定义求源文件长度的函数
int lenmain(const char *src,const char *dst)
{
    int fd1=0;//源文件
    int fd2=0;//目标文件
    if (-1==(fd1=open(src,O_RDONLY))||-1==(fd2=open(dst,O_WRONLY|O_CREAT|O_TRUNC,0664)))
    {
      printf("求长度失败失败\n");
      return -1;
    }
    //求文件长度
    int len=lseek(fd1,0,SEEK_END);
    close(fd1);
    close(fd2);
    return len;
}
//定义拷贝函数
int kaobei(const char*src,const char*dst,int start,int len)
{
    int fd1=0;//源文件
    int fd2=0;//目标文件
    if (-1==(fd1=open(src,O_RDONLY))||-1==(fd2=open(dst, O_WRONLY)))
    {
      printf("拷贝失败\n");
      return -1;
    }
    //把光标定到要拷贝的位置
    lseek(fd1, start, SEEK_SET);
    lseek(fd2, start, SEEK_SET);
    char buf1[1]="";//定义容器存储
    int sum=0;//表示读取个数
    while (1)
    {
      int res=read(fd1,buf1,sizeof(buf1));//先从fd1读取数据
      sum+=res;
      if (res==0&&sum>=len)//如果读取数据个数为0则停止循环
      {                   //如果读到指定位置停止
        break;
      }
      write(fd2,buf1,res);
    }
    //关闭文件
    close(fd1);
    close(fd2);
    printf("拷贝成功\n");
    return 0;
}
/***************主函数*******************/
int main(int argc, char const *argv[])
{
    if (argc!=3)
    {
      printf("input file error!!!\n");
      printf("usage:./a.out filename\n");
      return -1;
    }
    int len=lenmain(argv[1],argv[2]);
    pid_t pid = -1;//定义变量存储创建的进程id号
    pid =fork();//创建一个子进程
    //对pid进行判断
	if (pid>0)
    {
    //调用拷贝函数
    kaobei(argv[1],argv[2],0,len/2);//开头到中间
    }else if(pid==0)
    {
    //调用拷贝函数   
    kaobei(argv[1],argv[2],len/2,len);//中间到最后
    sleep(3);
    _exit(EXIT_SUCCESS);
    }else
    {
        perror("fork error");
        return -1;
    }
    //回收子进程资源
    sleep(5);
    waitpid(-1,NULL,WNOHANG);//非阻塞
    printf("回收子进程资源成功\n");
    return 0;
}

二.思维导图

标签:return,二十天,20240731,int,len,fd1,fd2,IO,拷贝
From: https://blog.csdn.net/m0_62828714/article/details/140830171

相关文章

  • Python - Strategies to handle exceptions in your code
    Therearetwoapproachesthatcanbefollowedwhenwewanttodealwithexceptionsthatoccurduetounusualevents:LBYL-LookBeforeYouLeapEAFP-EasiertoAskforForgivenessthanPermissionIntheLBYLapproach,weavoidexceptions,whileinthe......
  • Visual Studio 2022 WinForm/Wpf打包安装程序
     VisualStudio2022WinForm/Wpf打包安装程序1.安装扩展程序2.创建并设置用于打包安装程序的项目2.1新建SetupProject项目2.2添加需要打包的应用程序文件2.3添加项目主程序2.3添加主程序的桌面和任务栏快捷方式2.5添加卸载程序2.6添加卸载程序快捷方式2.7......
  • 一文详解Denoising Diffusion Implicit Models(DDIM)
    目录0前言1DDIM2总结0前言  上一篇博文我们介绍了目前流行的扩散模型基石DDPM,并且给出了代码讲解,有不了解的小伙伴可以跳转到前面先学习一下。今天我们再来介绍下DDPM的改进版本。DDPM虽然对生成任务带来了新得启发,但是他有一个致命的缺点,就是推理速度比较慢,......
  • 论文翻译:Evaluating Reading Comprehension Exercises Generated by LLMs: A Showcase
    EvaluatingReadingComprehensionExercisesGeneratedbyLLMs:AShowcaseofChatGPTinEducationApplicationshttps://aclanthology.org/2023.bea-1.52.pdfhttps://aclanthology.org/2023.bea-1.52/文章目录由大型语言模型(LLMs)生成的阅读理解练习评估:教育应用......
  • 论文阅读:Evaluating Reading Comprehension Exercises Generated by LLMs: A Showcase
    EvaluatingReadingComprehensionExercisesGeneratedbyLLMs:AShowcaseofChatGPTinEducationApplicationshttps://aclanthology.org/2023.bea-1.52.pdfhttps://aclanthology.org/2023.bea-1.52/这篇论文探讨了如何利用预训练的大型语言模型(LLMs),特别是OpenAI的......
  • ios CCUIView.m
    ////CCUIView.h//CCFC////#import<Foundation/Foundation.h>#import"CCUIButton.h"//创建UI控件的宏#defineUI_ALLOC_CREATE(UIctlName,x,y,width,height)[[UIctlNamealloc]initWithFrame:CGRectMake((x),(y),(width),(height))]#defi......
  • ios CCNSURL.m
    ////CCNSURL.h//CCFC////#import<Foundation/Foundation.h>@interfaceNSURL(cc)+(NSString*)telephonePrefix;+(NSString*)smsPrefix;+(NSString*)mailPrefix;+(NSString*)googleMapPrefix;@end////CCNSURL.m//CCFC////......
  • ios CCUIToolBar.m
    ////CCUIToolbar.h//CCFC////#import<Foundation/Foundation.h>#import<UIKit/UIToolbar.h>@interfaceUIToolbar(cc)//createacommontoolbar+(UIToolbar*)createCommonToolbar:(CGRect)rectitems:(NSArray*)buttonItemArr;@end /......
  • NIS(Network Information Services)服务端在R系部署,客户端rpm,deb简单使用
    #!/bin/bash####@Author:[email protected]#@Date:2024-05-28#@LastEditors:[email protected]#@LastEditTime:2024-07-19#@FilePath:NIS-use.sh#@Description:NIS(NetworkInformationServices)source:https://www.th......
  • Splittable Permutations
    第一次自己独立做出来的*2500,纪念一下首先模拟样例不难发现我们可以确定在\(l,r\)中出现过的数字(称这些数为“固定数”)的相对顺序(比如第一个样例,相对顺序为6425,我们只用插入\(1\)和\(3\)就好了),用链表维护就好了考虑剩下的某个数\(x\),不难发现它能放在的地方必须要求与其相邻......