进程
文件和设备
文件:有名字的数据对象
- 字节流(终端)/dev/null;/dev/random; ls -l 左边会有c character device 字符设备,

- 一旦读写 就被消失 吃掉了。
- 字节序列
文件描述符
-
一个指针,指向操作系统对象,访问。
-
open找到最小的没有用到的文件描述符p=malloc(sizeof(FileDescriptor));看 -012指向同一个空间。 fdls -l/proc/15423/fd
-
close delete(p)
-
read/write *(p.data++)
-
lseek 每个 对应一个游标 光标 在文件里的位置
-
dup 指针的拷贝。浅拷贝 freopen 备份描述符 dup(1)=4;dup2(1,4)返回

-
总是分配最小的未使用描述符,0 1 2 已经使用;从3 开始
-
进程能打开多少文件?
ulimit -n进程限制sysctl fs.file-max系统限制 -
进程fork 了以后?所有文件描述符复制下来,指向同一个对象,如果关掉了 printf都打印不了。对于终端设备可。其实访问文件时是offset+文件对象
-
dup()和fork()之后,文件描述符共享offset吗? fork是共享还是自己有offset.dup的指针共享同一个offset.
-
文件描述符定义了一个新的地址空间,在这个地址空间我们可以访问操作系统的对象。

windows中的文件描述符
handle:锅把子,你的把柄在我手上,我可以更好的控制你。。。句柄 指针
u盘上的操作系统? todo
/sys/class/backlight调整背光
/dev/urandom 随机数
- 操作系统提供了api可以创建对象 。/tmp 一个对象 ,/tmp/proc 一个对象 目录。
mount -t proc proc /temp/proc在该目录下创建一大堆对象。mount 挂载
strace + cmd查看当前命令的系统调用- dev/fs 控制终端 图形界面,文件系统访问磁盘上的数据。
管道 pipe
也是操作系统中的一个对象,一个特殊的文件(流式)字符设备
返回两个文件描述符 读口 写口
- 读数据读不到 会一直等。读口与写口的同步。读口读 没有数据 会等到有数据。
- fork 进程的快照。 0 1 2 3 4

- 父进程 想往子进程送数据 ,关掉3号读口。子进程关写口。

- 再使用dup+close实现
ls | wc-
- 实现父子之间同步 有顺序。
- makefifo有名字的管道。
- 一切皆文件 建立在这些api之上。
- 一套api访问所有对象。
|grep
- 一套api访问所有对象。
- shell 所有的一切都是字符串。