首先需要明白的是:1.子进程和父进程的数据段是独立的,代码段是共享的;
2.子进程是父进程的拷贝(包括pc,所以在父进程执行到fork的时候,创建的子进程也是从fork下一条语句开始执行);
3.父进程终止,子进程会被指定一个新的父进程init(其PID为1);
4.主线程和其创建的子线程间是共享数据的,参考前面的文章;
所以下面代码中父线程关闭了文件流,并不影响子进程中读数据:
//fork.cpp : g++ fork.cpp -o fork
#include <iostream>
#include <sys/time.h>
#include <unistd.h>
#include <sys/types.h>
#include <fstream>
int which1=1;
std::ifstream fIn;
int main(int argc,char** argv){
pid_t p1;
fIn.open("test.txt");
int a=1;
if((p1=fork())==0){
sleep(5);
std::string mid;
fIn>>mid;
std::cout<<"str="<<mid<<std::endl;
std::cout<<"a="<<a<<std::endl;
std::cout<<"child process"<<std::endl;
}else if(p1>0){
fIn.close();
a=2;
sleep(1);
std::cout<<"main process"<<std::endl;
}
sleep(1);
std::cout<<"exit"<<std::endl;
}//main