导航:首页 > 文件类型 > 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文件相关的资料

热点内容
打开压缩文件一直转圈 浏览:72
怎么除去文件名的后缀 浏览:107
如何学习下位机编程 浏览:206
日本人如何修复网络 浏览:373
江苏量淘数据怎么样 浏览:422
一组数据2的方差是多少 浏览:535
电脑设置删除显示找不到文件 浏览:454
中国证券app有哪些 浏览:890
天正施工图教程 浏览:428
家庭网络有什么 浏览:126
红米升级系统找不到私密文件 浏览:557
360卫士文件功能描述 浏览:350
魅蓝e2升级yunos 浏览:381
修改ipadID密码 浏览:308
男生去哪里学编程 浏览:772
腻子数据怎么恢复 浏览:699
win10特殊配置文件登录 浏览:55
可视电话电源网站封住了怎么办 浏览:811
如何打印word批注 浏览:152
qq在线表格换成word文件 浏览:138

友情链接