当前位置: 首页 > 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;
}

 

http://www.dtcms.com/a/53619.html

相关文章:

  • 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:全方位对比解析
  • linux0.11源码分析第四弹——操作系统的框架代码
  • 类和对象—多态—案例2—制作饮品
  • 笔记:如何使用XAML Styler以及在不同的开发环境中使用一致
  • 第7章 wireshark(网络安全防御实战--蓝军武器库)
  • 阿里云 DataWorks面试题集锦及参考答案
  • Visual Studio 2022新建c语言项目的详细步骤
  • 文献学习: 单细胞+肿瘤转移研究的发文思路解析:如何构建核心基因特征,揭示关键调控网络?
  • VB6 调用 JS 函数时数据传输json格式或a=1b=s2字符串
  • 十倍烈火刀刀爆?伪随机分布(PRD)算法详解与C++实现
  • 洛谷P1091