华清远见作业第二十一天——IO(第四天)

2024-01-05 01:28

本文主要是介绍华清远见作业第二十一天——IO(第四天),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

思维导图:

 创建出三个进程完成两个文件之间拷贝工作,子进程1拷贝前一半内容,子进程2拷贝后一半内容,父进程回收子进程的资源。

代码:

#include<myhead.h>
int main(int argc, const char *argv[])
{if(argc!=3){printf("内容错误\n");return -1;}//定义字符搬运工char buf[100]="";//以只读的形式打开源文件FILE *rfp=NULL;if((rfp=fopen(argv[1],"r"))==NULL){perror("rfp error");return -1;}//使用fseek和ftell函数定位到文件的数量//fseek(文件指针,偏移量,开始的位置)//ftell(文件中指针),直接返回文件的位置,既把指针最后的位置,返回文件数量int num=0;    //计数	fseek(rfp,0,SEEK_END);	//光标偏移到文件最后的位置num=ftell(rfp);   //返回值就是文件的数量fseek(rfp,0,SEEK_SET);   //光标偏移到文件开头的位置//定义追加写的形式打开文件FILE *wfp=NULL;if((wfp=fopen(argv[2],"a"))==NULL){perror("wfp error");return -1;}pid_t pid1=-1;//创建一个子进程pid1=fork();if(pid1==0){printf("我是老大\n");printf("拷贝文档后部分内容\n");//定义追加写的形式打开文件FILE *wfp=NULL;if((wfp=fopen(argv[2],"a"))==NULL){perror("wfp error");return -1;}//bzero(清零的地址,空间字节数)//防止buf中有内容影响操作bzero(buf,sizeof(buf));	//清零buf//由于读文件已经打开,故需要把光标定位到开头fseek(rfp,num/2,SEEK_SET); //光标定位从开头偏移到num/2后面//由于需要限制位置,所以使用fread函数来进行读取int count=fread(buf,sizeof(buf[0]),num-num/2,rfp);//写入使用fwrite函数fwrite(buf,sizeof(buf[0]),count,wfp);//执行成功后关闭源文件以及被写入文件fclose(rfp);fclose(wfp);sleep(2);printf("拷贝文档后部分内容\n");//退出老大进程exit(EXIT_SUCCESS);}else if(pid1>0){//创建一个子进程pid_t pid2=fork();if(pid2==0){printf("我是老二\n");printf("拷贝文档前一部分内容\n");//定义追加写的形式打开文件FILE *wfp=NULL;if((wfp=fopen(argv[2],"a"))==NULL){perror("wfp error");return -1;}//bzero(清零的地址,空间字节数)//防止buf中有内容影响操作bzero(buf,sizeof(buf));	//清零buf//由于读文件已经打开,故需要把光标定位到开头fseek(rfp,0,SEEK_SET); //光标定位开头//由于需要限制位置,所以使用fread函数来进行读取int count=fread(buf,sizeof(buf[0]),num/2,rfp);//写入使用fwrite函数fwrite(buf,sizeof(buf[0]),count,wfp);//关闭被写入文件fclose(wfp);sleep(5);printf("拷贝前一部分内容完成\n");//退出进程老二exit(EXIT_SUCCESS);}else if(pid2>0){printf("我是父进程,我来收回资源\n");printf("我是父进程,我的第一个子进程pid:%d,第二个为:\%d\n", pid1, pid2);wait(NULL);wait(NULL);printf("孩子都死了,不活了\n");}else{perror("fork error");return -1;}}else {perror("fork error");return -1;}return 0;
}

运行效果:

进程五种状态转换图

这篇关于华清远见作业第二十一天——IO(第四天)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/571216

相关文章

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

springboot体会BIO(阻塞式IO)

使用springboot体会阻塞式IO 大致的思路为: 创建一个socket服务端,监听socket通道,并打印出socket通道中的内容。 创建两个socket客户端,向socket服务端写入消息。 1.创建服务端 public class RedisServer {public static void main(String[] args) throws IOException {

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

android java.io.IOException: open failed: ENOENT (No such file or directory)-api23+权限受权

问题描述 在安卓上,清单明明已经受权了读写文件权限,但偏偏就是创建不了目录和文件 调用mkdirs()总是返回false. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_E

JavaEE-文件操作与IO

目录 1,两种路径 二,两种文件 三,文件的操作/File类: 1)文件系统操作 File类 2)文件内容操作(读文件,写文件) (1)打开文件 (2)关闭文件 (3)读文件/InputStream (4)写文件/OutputStream (5)读文件/reader (6)写文件/writer (7)Scanner 四,练习: 1,两种路径 1)绝对路径

Python---文件IO流及对象序列化

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 前文模块中提到加密模块,本文将终点介绍加密模块和文件流。 一、文件流和IO流概述         在Python中,IO流是用于输入和输出数据的通道。它可以用于读取输入数据或将数据写入输出目标。IO流可以是标准输入/输出流(stdin和stdout),也可以是文件流,网络流等。

标准IO与系统IO

概念区别 标准IO:(libc提供) fopen fread fwrite 系统IO:(linux系统提供) open read write 操作效率 因为内存与磁盘的执行效率不同 系统IO: 把数据从内存直接写到磁盘上 标准IO: 数据写到缓存,再刷写到磁盘上

【JAVA】第四天

JAVA第四天 一、Object类二、Objects类三、包装类四、字符串修改 一、Object类 表格: 方法名作用public String toString()返回对象的字符串表示形式public boolean equals(Object o)判断两个对象是否相等protected Object clone​()对象克隆 注意 toString() 和 equals(

Java高级Day38-网络编程作业

112.网络编程作业 //1.使用字符流的方式,编写一个客户端程序和服务器端程序//2.客户端发送"name",服务器端接收到后,返回"我是nova"//3.客户端发送"hobby",服务器端接收到后,返回"编写java程序"//4.不是这两个问题,回复"你说啥呢"​​===============//客户端//===============public class SocketT