sleep
实现一个sleep命令,达到睡眠效果
1 |
|
这里很简单,直接系统调用sleep()
pingpong
要求使用pipe管道传输一个字符,其实就是学习pipe管道的用法,如何创建一个管道pipe(int* fd)
, 要求传入一个数组,其会返回两个file description
第一个fd代表read端,指你可以从这一端读取到数据
第二个fd代表write端,指你可以从这一端写入数据
write -> fd1(write端) ||||||||| fd0(read端) -> read
数据流向从fd1流向fd0
下面代码就是父子进程使用管道传递数据的样例,其使用了两个管道,这也是因为pipe是单向流动的
1 | int main() { |
1 |
|
primes (Hard)
这个实验最关键的是提到了rsc模型
rsc提出了一种新的并发模型的观点,即使用管道通信来实现同步的效果,Golang的并发实践了该观点,有很多讲解的文章可以去搜搜看。
对于这个实验而言,其实跟rsc没太大关系,大致实现思路是,对于单独的一根管道,这根管道有一个基质数,所有他整除的数都会被过滤掉,没被过滤的数进入下一根管道去过滤,以此来实现线性素数筛。
1 |
|
find
实现find命令,类似这样find . a,即在当前目录递归寻找与a同名的文件。
find命令的编写还是有趣的,实验指导提示可以参照ls是如何遍历目录的。
这里会学习到一些函数例如fstat、stat,以及目录项dirent
1 |
|
xargs (重点)
看代码吧,不多做解释了
1 |
|