12.06

1.

2.

#include "myhead.h"
int main(int argc, const char *argv[])
{
		int fd=-1;//创建一个文件写入东西
		if((fd=open("./text.txt",O_RDWR|O_CREAT|O_TRUNC,0664))==-1){
			perror("create error");
			return -1;}
			char wbuf[128]="HELLO world";
			write(fd,wbuf,strlen(wbuf));
		int length=lseek(fd,0,SEEK_END);//计算文件有多长
		printf("length=%d\n",length);
		close(fd);
		if((fd=open("./text.txt",O_RDONLY))==-1){
			perror("open error");
			return -1;
		}
		int fd1=-1;//创建另一个文件用于拷贝
			if((fd1=open("./1text.txt",O_WRONLY|O_CREAT|O_TRUNC,0664))==-1){
				perror("w error");
				return -1;
			}
			int fd2=-1;//多次使用open打开第一个文件,独立控制光标
			if((fd2=open("./text.txt",O_RDONLY))==-1){
				perror("open error");
				return -1;
			}

	int pid1=-1;//创建3个进程
	pid1=fork();
	if(pid1>0){
		int pid2=-1;
		pid2=fork();
		if(pid2>0){
			printf("是父进程,第一个子进程pid:%d,第二个子进程:pid:%d\n",pid1,pid2);
			wait(NULL);
			wait(NULL);
		}else if(pid2 == 0){
			printf("第二个子进程\n");//在第一个进程中读取一半
			for(int i=0;i<(length/2);i++){
				char rbuf[128];
			read(fd,rbuf,1);
			write(fd1,rbuf,1);//拷贝到文件中
			write(1,rbuf,1);//回显到终端看一下
			}
			puts("\n");
			exit(EXIT_SUCCESS);//结束进程
		}else{
			perror("fork error");
			return -1;
		}
	}else if(pid1 == 0){
		printf("第一个子进程\n");//在第二个进程中读取另一半
		lseek(fd2,(length/2),SEEK_SET);//将光标定位到一半的位置
		for(int i=(length/2);i<length;i++){
			char rbuf1[128];
			read(fd2,rbuf1,1);
			write(fd1,rbuf1,1);
			write(1,rbuf1,1);
		}
		puts("\n");
		exit(EXIT_SUCCESS);
	}else{
		perror("fork error");
		return -1;
	}
	close(fd);//关闭文件
	close(fd2);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值