导航:首页 > 文件类型 > linuxfork文件

linuxfork文件

发布时间:2023-03-12 11:31:18

linux fork 会共享哪些东西

fork()不仅创建出与父进程代码相同的子进程,而且父进程在fork执行点的所有上下文场景也被自动复制到子进程中,包括:
—全局和局部变量
—打开的文件句柄
—共享内存、消息等同步对象
由于pipe调用相当于创建了2个文件句柄,因此在fork后这两个句柄也被自动复制到子进程中,对这两个句柄的操作效果与在主进程中的操作效果是一致的,这就使父子进程之间很容易通过该机制实现数据交换,如:
假设pipe产生的句柄为P[0],P[1],在fork后父子进程都拥有了P[0],P[1]句柄,那么:
—父进程可向自己的P[1]中写入数据,子进程从P[0]中即可读出该数据;切记此时父进程不能也从P[0]读数据,否则自己写入的数据可能先被自己读走了
—反之亦然,子进程向P[1]中写入数据后,父进程从P[0]中可读出该数据;切记此时子进程不要从P[0]读走数据
你可能难以理解为什么进程内部的数据读写会被传递到另一个进程,但别忘了,pipe匿名管道和文件,socket等一样是属于操作系统的管理对象,对其进行读写都是由OS的内核代码来进行控制的。在父进程调用pipe创建出管道后,该管道对象是存储在OS内部的,父进程得到的P[0]和P[1]都只是对该对象的引用(相当于指针);在fork出子进程后,子进程复制出的也只是同一个指针,所指向的还是OS中的同一个对象,这就是为什么父子进程能通过其进行互相通信的原因。

❷ 纯小白,请Linux怎么调用fork()创建两个子进程并运行

是的,需要在cpp里面调用fork,然后再执行exec。
下面是个例子:

pid_t pid = fork();
if (pid < 0) {
return;
}
else if (pid == 0) {
printf("child process!回!!!\n");
char *argv[] = { (char *)"tst_app", (char *)"xx", NULL };
execv("/usr/bin/tst_app", argv);
}
请采答纳,谢谢

❸ LINUX中fork.c文件作用

楼上的(回答者: 497820833 - 助理 二级 2009-7-10 17:20),

你添加了一个else,只是在fork发生异常时不需要再做后面两个分回支的判断答了,可以说意义不大,因为没有else一样能够实现同样的效果。

阅读全文

与linuxfork文件相关的资料

热点内容
手机里暴风隐藏文件路径 浏览:49
win10备份系统文件好大 浏览:293
js导出html到excel 浏览:725
c游戏编程用什么软件 浏览:645
java依赖倒置 浏览:166
华为畅玩5x微信运动 浏览:819
applepay必须改美国时间 浏览:893
max文件默认打开方式 浏览:466
拆迁农民要看的有哪些文件 浏览:351
苹果手机铃声的文件后缀 浏览:352
什么东西代表了编程 浏览:698
网络中心如何关闭 浏览:258
k3编程是什么意思 浏览:296
vba和sql数据库哪个好 浏览:38
u启王u盘启动盘制作工具 浏览:228
深入理解android网络编程 浏览:615
javah无法访问 浏览:11
keyvalue内存数据库 浏览:446
2016年淘宝店铺装修教程 浏览:394
哪个地区把编程纳入高考范围中了 浏览:327

友情链接