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

Linux 基本语句_11_无名管道文件复制

父子进程:

父子进程的变量之间存在着读时共享,写时复制原则

无名管道:

无名管道仅能用于有亲缘关系的进程之间通信如父子进程

代码:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/fcntl.h>
#include <stdlib.h>

#define N 100

int main(int argc, const char *argv[]){
	
	pid_t pid;
	int fdr, fdw;
	ssize_t nbyte;
	int fd[2];
	char buf[N] = "";
	
	if(argc != 1 && argc != 3){
		printf("number error\n");
		exit(0);
	}
	
	if((fdr = open(argv[1], O_RDONLY)) < 0){
		printf("read open error\n");
		exit(0);
	}
	
	if((fdw = open(argv[2], O_CREAT|O_WRONLY|O_TRUNC, 0664)) < 0){
		printf("write open error\n");
		exit(0);
	}
	
	if(pipe(fd) < 0){
		printf("pipe error\n");
		exit(0);
	}
	pid = fork();//创建子进程
	
	if(pid < 0){
		printf("fork error\n");
		exit(0);
	}
	else if(pid == 0){ // 子进程 
		while((nbyte = read(fd[0], buf, N)) > 0){ // 管道读取端读取消息 
			write(fdw, buf, nbyte); // 写入文件 
		} 
	}
	else{
		while((nbyte = read(fdr, buf, N)) > 0){ // 在被读写的文件中读取数据 
			write(fd[1], buf, nbyte); // 在管道写入端写入数据 
		}
	}
	return 0; 
}

解释:

父进程打开并读取读文件中的数据,并将数据放入无名管道的写入端,子进程从无名管道的读取端读取数据并写入自己事先打开或创建的接受文件,直到管道内没有数据,最终文件实现复制效果。

注意:read函数返还值为真实读取的数据,N期望读取的数据

效果:

在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/a/136612.html

相关文章:

  • Idea-离线安装SonarLint插件地址
  • 【MySQL 保姆级教学】用户管理和数据库权限(16)
  • 『SQLite』解释执行(Explain)
  • 【大模型】百度千帆大模型对接LangChain使用详解
  • 数据库中锁与ETL的故障排除和性能优化
  • 课题推荐——基于GPS的无人机自主着陆系统设计
  • 【Java源码】智慧工地云平台:工地管理专家
  • 【深入Scrapy实战】从登录到数据解析构建完整爬虫流程
  • .skip() 和 .only() 的使用
  • 打工人必备!6个超级实用的办公软件,让你高效完成工作
  • Android 9.0 设备蓝牙、位置、WIFI、NFC功能默认关闭
  • GitLab的个人仓库转移到团队仓库
  • 什么是硬分叉?硬分叉的原因是什么?硬分叉的影响是什么?
  • 请问DasViewer是否支持与业务系统集成,将业务的动态的数据实时的展示到三维模型上?
  • SQL单表复杂查询where、group by、order by、limit
  • 几个强力的nodejs库
  • JAXB:根据Java文件生成XML schema文件
  • 打印工具HandyPrint Pro Mac中文版软件特点
  • FISCOBCOS入门(十)Truffle测试helloworld智能合约
  • 微信私域运营工具CRM
  • 什么是泛型编程和模板技术?C语言中如何实现泛型编程?
  • 【Kingbase FlySync】命令模式:安装部署同步软件,实现Oracle到KES实现同步
  • Django 入门学习总结9-第三方包的使用
  • 【机器学习12】集成学习
  • 释放搜索潜力:基于Milvus快速搭建语义检索系统(快速版),让信息尽在掌握
  • 钩子函数-hook