若没有子进程wait函数是否阻塞,wait函数是否运行成功.
#include <head.h>
int main(int argc, const char *argv[])
{
pid_t wpid=wait(NULL);
printf("wpid=%d __%d__\n",wpid,__LINE__);
printf("pid=%d __%d__\n",getpid(),__LINE__);
return 0;
}
用文件IO函数拷贝一张图片,要求子进程拷贝后半部分,父进程拷贝前半部分。
#include <head.h>
int main(int argc, const char *argv[])
{
int fp=open("./1.jpg",O_RDONLY);
if(fp<0)
{
perror("open");
return -1;
}
off_t size=lseek(fp,0,SEEK_END);
printf("size=%ld\n",size);
int cp=open("./2.jpg",O_RDWR|O_CREAT|O_TRUNC,0777);
if(cp<0)
{
perror("open");
return -1;
}
pid_t pid=fork();
char buf[1]="";
ssize_t res=0;
lseek(fp,0,SEEK_SET);
if(pid>0)
{
wait(NULL);
lseek(fp,0,SEEK_SET);
lseek(cp,0,SEEK_SET);
while(1)
{
ssize_t d=lseek(fp,0,SEEK_CUR);
if(d==(size/2))
break;
bzero(buf,sizeof(buf));
res=read(fp,buf,sizeof(buf));
write(cp,buf,res);
}
}
else if(pid==0)
{
ssize_t a=lseek(fp,(size/2),SEEK_SET);
lseek(cp,(size/2),SEEK_SET);
printf("a=%ld\n",a);
while(1)
{
bzero(buf,sizeof(buf));
res=read(fp,buf,sizeof(buf));
if(res==0)
break;
write(cp,buf,res);
}
exit(0);
}
else
{
perror("fork");
return -1;
}
close(cp);
close(fp);
return 0;
}