LINUX学习——fork

文章讨论了C语言中printf函数的缓冲区机制,特别是如何受 影响导致输出顺序变化。它还提到了fork()创建的父子进程间内存空间的差异,尽管逻辑地址相同,但物理地址不同,这在页表中得到解释。同时,文章指出_exit(0)不刷新缓冲区并直接退出程序。
摘要由CSDN通过智能技术生成

引言

在这里插入图片描述

而输出顺序却是先阻塞3秒,再输出hello
在这里插入图片描述
而对于hello后面加上换行符 “/n”
在这里插入图片描述
输出顺序先是输出hello,再是阻塞三秒
在这里插入图片描述


原因是printf函数会把要输出的字符先存入缓冲区当中,再提交给内核,再提交给屏幕进行打印
“\n” 会强制刷新缓冲区,所以会出现上述后者的情况。
也可以用 *fflush(FILE )函数 进行缓冲区刷新


出现以下三种情况,数据会提交给屏幕打印:
1.
补充:
对于 _exit(0) 函数,他不会强制刷新缓冲区,而是直接退出程序


主函数的三个参数

argc:主函数的参数个数

argv:主函数的参数内容

envp:环境变量

环境变量和参数内容都是以空作为结尾


对于环境变量我们也可以手动添加:
在这里插入图片描述
在这里插入图片描述


fork()方法

在这里插入图片描述
补充 :getpid() 函数 可以获取进程的pid


在这里插入图片描述
在这里插入图片描述


父子进程所用的不是同一块内存空间,但是为什么 &n的地址 是一样的呢?
因为这里显示的地址是逻辑地址,而不是物理地址
在这里插入图片描述

橙色:父进程
绿色: 子进程

可以看出父子进程都有同一个代号为0的逻辑地址,但是他们所对应的物理地址是不一样的
在这里插入图片描述
再看页表,就可以解释为什么同一个n,即有值为3,又有值为7了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值