在Linux下,使用fork()函数,父子进程是否会出现交替进行的现象?
#include<stdio.h>main(){intp;while((p=fork())==-1);if(p==0){//代码段A,很多代码}else{//代码段B,很...
#include <stdio.h> main(){ int p; while((p=fork())==-1); if(p==0) { //代码段A,很多代码 } else { //代码段B,很多代码 }} 父子进程既然是并发执行的,请问代码段A和代码段B有没有可能交替运行?例如在代码A中输了一段文字,又运行了代码B中输出一段文字,再返回代码段A继续打印内容? 菜鸟提问,望指点!
展开
2013-08-22
展开全部
mmap()范例 下面将给出使用mmap()的两个范例:范例1给出两个进程通过映射普通文件实现共享内存通信;范例2给出父子进程通过匿名映射实现共享内存。系统调用mmap()有许多有趣的地方,下面是通过mmap()映射普通文件实现进程间的通信的范例,我们通过该范例来说明mmap()实现共享内存的特点及注意事项。范例1:两个进程通过映射普通文件实现共享内存通信范例1包含两个子程序:map_normalfile1.c及map_normalfile2.c。编译两个程序,可执行文件分别为map_normalfile1及map_normalfile2。两个程序通过命令行参数指定同一个文件来实现共享内存方式的进程间通信。map_normalfile2试图打开命令行参数指定的一个普通文件,把该文件映射到进程的地址空间,并对映射后的地址空间进行写操作。map_normalfile1把命令行参数指定的文件映射到进程地址空间,然后对映射后的地址空间执行读操作。这样,两个进程通过命令行参数指定同一个文件来实现共享内存方式的进程间通信。下面是两个程序代码:/*-------------map_normalfile1.c-----------*/#include <sys/mman.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>typedef structpeople;main(int argc, char** argv) // map a normal file as shared mem: printf(" initialize over \n "); sleep(10); munmap( p_map, sizeof(people)*10 ); printf( "umap ok \n" );}/*-------------map_normalfile2.c-----------*/#include <sys/mman.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>typedef structpeople;main(int argc, char** argv) // map a normal file as shared mem: munmap( p_map,sizeof(people)*10 );} map_normalfile1.c首先定义了一个people数据结构,(在这里采用数据结构的方式是因为,共享内存区的数据往往是有固定格式的,这由通信的各个进程决定,采用结构的方式有普遍代表性)。map_normfile1首先打开或创建一个文件,并把文件的长度设置为5个people结构大小。然后从mmap()的返回地址开始,设置了10个people结构。然后,进程睡眠10秒钟,等待其他进程映射同一个文件,最后解除映射。map_normfile2.c只是简单的映射一个文件,并以people数据结构的格式从mmap()返回的地址处读取10个people结构,并输出读取的值,然后解除映射。分别把两个程序编译成可执行文件map_normalfile1和map_normalfile2后,在一个终端上先运行./map_normalfile2 /tmp/test_shm,程序输出结果如下:initialize overumap ok 在map_normalfile1输出initialize over 之后,输出umap ok之前,在另一个终端上运行map_normalfile2 /tmp/test_shm,将会产生如下输出(为了节省空间,输出结果为稍作整理后的结果):name: b age 20; name: c age 21; name: d age 22; name: e age 23; name: f age 24;name: g age 25; name: h age 26; name: I age 27; name: j age 28; name: k age 29; 在map_normalfile1 输出umap o
这个问题在Linux下,使用fork()函数,父子进程是否会出现交替进行的现象?,好难啊,辛辛苦苦回答了,给我个满意答案把 http://www.henanlj.com/
这个问题在Linux下,使用fork()函数,父子进程是否会出现交替进行的现象?,好难啊,辛辛苦苦回答了,给我个满意答案把 http://www.henanlj.com/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询