xv6_《book-rev11》_第0章

本文深入探讨了xv6系统中fork()与exec()的使用,阐述了为何不将两者合并为一个系统调用的原因。接着介绍了文件描述符的概念及其重要性,并讨论了管道作为进程间通信手段的优势。此外,还讲解了文件名与文件inode的关系,以及如何利用此特性创建临时文件。最后,文章提到了shell命令的设计原理,解释了为何需要将`cd`命令内置到shell中。
摘要由CSDN通过智能技术生成

xv6_《book-rev11》_第0章

fork() 与exec()

创建一个新进程的通常做法是调用fork()以后紧接着调用exec(),那么为什么不将这两个系统调用设计为一个呢?

fork()拷贝父进程的文件描述符表和内存内容,而exec()调用会替换掉父进程的内存内容,但是保留文件描述符表。这使得shell可以利用fork()实现IO的重定向,在子进程中重定位新的输入输出以后,再用子进程调用exec()执行新的程序处理文件。如果fork()和exec()被组合为一个系统调用,shell就需要另外的方法来重定向标准输入和输出,或者程序本身需要知道如何重定向输入输出。

文件描述符
  • 文件描述符是一个小的整形数字,它是一个由内核管理的用于进程读写的对象。
  • 文件描述符是一个相当有力的抽象,它屏蔽了它真正连接的事物的细节——一个进程可以通过文件描述符对文件、设备或是管道进行读写。
管道的优点

事实上很多情况下,管道可以被临时文件替代,比如:

echo hello word | wc

可以被替换为:

echo hello world >/tmp/xyz; wc </tmp/xyz

那么管道有哪些优点呢?在这种场景下,管道至少有以下优点:

  • 管道会自动清理自己,而临时文件使用完毕后需要很谨慎地删除。
  • 管道可以传送任意长度的流数据࿰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值