1.若没有子进程wait函数是否阻塞,wait函数是否运行成功.
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <head.h>
int main(int argc, const char *argv[])
{
int a = 9;
printf("%d",a);
wait(NULL);
return 0;
}
运行结果:
无堵塞
2.用文件IO函数拷贝一张图片,要求子进程拷贝后半部分,父进程拷贝前半部分。
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <head.h>
int main(int argc, const char *argv[])
{
int a = open("tu1.jpg",O_RDONLY);
if( a < 0)
{
perror("open");
return -1;
}
else
printf("open a success %d \n",__LINE__);
int b = open("tu2.jpg",O_RDWR | O_CREAT | O_TRUNC,0777);
if( b < 0)
{
perror("open");
return -1;
}
else
printf("open b success %d \n",__LINE__);
off_t size = lseek(a,0,SEEK_END);
printf("%ld\n",size);
printf("%ld\n",size/2);
char i;
pid_t cpid = fork();
if(cpid > 0 )
{
off_t size_2 = lseek(a,0,SEEK_SET);
int read_f = 0;
char arr[size/2];
bzero(arr,sizeof(arr));
read_f = read(a,arr,sizeof(arr));
write(b,arr,read_f);
}
else if(cpid == 0)
{
off_t size_1 = lseek(a,(size/2),SEEK_SET);
int read_s = 0;
while(1)
{
read_s = read(a,&i,1);
if(read_s == 0 )
break;
write(b,&i,1);
}
}
if(close(a) < 0)
{
perror("close");
return -1;
}
else
printf("close a success %d \n",__LINE__);
if(close(b) < 0)
{
perror("close");
return -1;
}
else
printf("close b success %d \n",__LINE__);
return 0;
}
运行结果: