本文仅用作学习记录。
具体实现在这里:yrzr21/xv6 (github.com)
可能需要查看文件:
管道是单向的,想要双向通信必须使用两个管道
递归过程中注意检测 read 的返回值以判断终止条件
fork产生的子进程共享父进程的文件描述符,但可单独关闭而不影响另一个进程
小心关闭不需要的 fd,不然很可能不够用…
参考:贝尔实验室和 CSP 线程 — Bell Labs and CSP Threads (swtch.com)
概述:并发编程不应仅仅被视作一种提升效率的手段,提升效率有多种方式,如asynchronous event-driven programming 异步事件驱动的编程,不一定需要并发编程。并发编程还可以提供一种自然的抽象,使得程序更加简单
SRC 线程模型过于底层,不得不配合一些其他的技术才能使用,此处提供了一种新的内存模型
open后,使用 fstat 获取文件信息存储在 struct stat 中,里面保存了包含文件类型的各种信息:
读取目录文件存储在 struct dirent 中:
指针数组,与二维数组完全不同:
args + x 表示第 x+1 个元素:
指针数组做参数时可能要求以NULL结尾:
注意指针运算:
复制只是指针赋值…而非复制字符串
可用这种方式初始化:
read 读进来的数据不会自动补0,需要自己加
小心判断字符串中的元素:
exec 的第一个元素必须是执行的程序名称
如:argv[1] 为 grep,则 args[0] 必须是 grep,且 args 以 NULL 结尾