网站建设所需要的技能株洲24小时新闻
一、思维导图
进程概念
进程函数
特殊进程
二、练习
使用父子进程实现一个图片的拷贝
要求父进程拷贝前一部分
子进程拷贝后一部分
使用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);}//创建失败elsePRINT_ERROR("fork");//关闭图片close(fd);return 0;
}