当前位置: 技术问答>linux和unix
关于vfork()函数对父进程空间的处理
来源: 互联网 发布时间:2016-08-17
本文导语: 在APUE上关于VFORK讲的太少,看了一遍又一遍还是看不出门道。只知道vfork()调用后子进程先起来。是在父进程环境上运行的。如果在子进程中对父进程的一个变量写操作。则该变量在父进程也已经改变(因为是共享的...
在APUE上关于VFORK讲的太少,看了一遍又一遍还是看不出门道。只知道vfork()调用后子进程先起来。是在父进程环境上运行的。如果在子进程中对父进程的一个变量写操作。则该变量在父进程也已经改变(因为是共享的)。
但是最近遇到一个问题,就是uClinux上只有vfork,程序需要vfork()结合pipe()。
在父子进程中各自关闭不需要的 读端,写端。然后进行通信,发现和 fork()的结果是一样的。就很郁闷了。按理说在子进程中关闭写端,那么在父进程中该写端也被关闭了(不是共享吗)。但是事实上并没有。
还有 ,不但是管道,对于打开的文件也是如此。
8 int main()
9 {
10 int n;
11 int open_fd;
12 int fd[2];
13 pid_t pid;
14 char line[16];
15 open_fd = open("local.c", O_RDONLY);
16 if(pipe(fd)
但是最近遇到一个问题,就是uClinux上只有vfork,程序需要vfork()结合pipe()。
在父子进程中各自关闭不需要的 读端,写端。然后进行通信,发现和 fork()的结果是一样的。就很郁闷了。按理说在子进程中关闭写端,那么在父进程中该写端也被关闭了(不是共享吗)。但是事实上并没有。
还有 ,不但是管道,对于打开的文件也是如此。
8 int main()
9 {
10 int n;
11 int open_fd;
12 int fd[2];
13 pid_t pid;
14 char line[16];
15 open_fd = open("local.c", O_RDONLY);
16 if(pipe(fd)