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

IO学习day4

一、思维导图

进程概念

 

 

进程函数

 

特殊进程

 

二、练习

使用父子进程实现一个图片的拷贝

要求父进程拷贝前一部分

子进程拷贝后一部分

使用diff查看两个文件是否相同

父进程读取前一半数据

 

 子程序读取一半


#include <head.h>
int main(int argc, const char *argv[])
{
    //打开图片
    int fd=open("./xiaoxin - 副本.bmp",O_RDONLY);
    if(fd==-1)
        PRINT_ERROR("open errpr");
    //获取图片大小
    int size;
    lseek(fd,2,SEEK_SET);
    if(read(fd,&size,sizeof(size))<=0)
        PRINT_ERROR("read error");                               
    printf("size=%d\n",size);
    //找到图片的数据内容
    //lseek(fd,54,SEEK_SET);
    //产生父子进程
    pid_t cpid=fork();
    lseek(fd,0,SEEK_SET);
    int i=size/2;
    //父进程
    if(cpid>0)
    {
        //打开一个文件存前一部分
        int fd1=open("./1.bmp",O_RDWR | O_CREAT,0664);
        if(fd1==-1)
            PRINT_ERROR("1-error");
        //write写入数据
        unsigned char str1[i];
        ssize_t a=read(fd,str1,i);
        printf("a=%ld\n",a);
        ssize_t res=write(fd1,str1,sizeof(str1));
        if(res==-1)
            PRINT_ERROR("write error");
        printf("res=%ld\n",res);
        int m;
        wait(&m);
        close(fd1);

    }
    //子进程
    else if(cpid==0)
    {
        //打开文件并将光标定位到后一半 
        int fd1=open("./1.bmp",O_RDWR | O_CREAT,0664);
        if(fd1==-1)
            PRINT_ERROR("1-error");
        lseek(fd1,i,SEEK_SET);
        //write写入数据
        int i=size/2;
        unsigned char str1[i];
        ssize_t a=read(fd,str1,i);
        printf("a=%ld\n",a);
        ssize_t res=write(fd1,str1,sizeof(str1));
        if(res==-1)
            PRINT_ERROR("write error");
        printf("res=%ld\n",res);
        exit(1);
        lseek(fd1,0,SEEK_SET);
        close(fd1);


    }
    //创建失败
    else
        PRINT_ERROR("fork");
    //关闭图片
    close(fd);
    return 0;
}

 

相关文章:

  • qt 播放pcm音频
  • 06实现相册小项目
  • 个人学习编程(3-06) 树形数据结构
  • Go语言里面的堆跟栈 + new 和 make + 内存逃逸 + 闭包
  • URL中的特殊字符与web安全
  • uniapp封装路由管理(兼容Vue2和Vue3)
  • module ‘matplotlib‘ has no attribute ‘colormaps‘
  • phpstorm 无法重建文件
  • 统信UOS上AI辅助绘图:用DeepSeek+draw.io生成流程图
  • NET400协议网关(老款GRM300):跨品牌PLC与多协议数据整合解决方案,包含NET421,NET422,NET431等
  • 单细胞分析(22)——高效使用 Cell Ranger:安装、参数解析及 Linux 后台运行指南
  • Mysql中的常用函数
  • 系统架构设计师—数据库基础篇—数据库规范化
  • RxJava 用法封装举例
  • 初中文凭怎么成人大专-一种简单省心的方式
  • Gauss数据库omm用户无法连接处理
  • 写作思维魔方
  • 下载PyCharm 2024.3.4 (Community Edition)来开发测试python
  • 多线程或多进程或多协程部署flask服务
  • 网络安全等级保护2.0 vs GDPR vs NIST 2.0:全方位对比解析
  • 主机搭建网站教程/学生个人网页设计模板
  • 域名空间网站怎么做/客服网站搭建
  • 好的网站开发公司/sem是什么测试
  • 建设网站建设安全培训平台/网页开发需要学什么
  • 汕头拿家做网站/培训机构管理系统
  • 明年做哪个网站能致富/秦皇岛seo优化