- 论坛徽章:
- 7
|
以bash为例谈谈shell的重定向
文件描述符(File Descriptor)及其约定:
在unix-like系统中FD是一个int类型变量,每个进程都有3个特定的FD(0,1,2),分别是stdin,stdout,stderr。shell加载进程时按照约定会在进程的PCB中准备好这3个FD,通常stdin指向keyboard,stdout和stderr指向screen。
FD, FDT和System File Table:
FD 文件描述符,FDT的索引值。
FDT 一个表(数组)每个表成员有一个指针指向System File Table中的一项,在用户空间。
System File Table 存放打开的文件状态的表,在kernel空间。
不影响理解重定向的情况下,可以简化为: FD是FDT数组的一个下标,FDT是一个存放着指针的数组,里面的指针指向SFT中的一个数据结构(文件名,打开状态,文件偏移offset等等)
FD1的文件名就可以用
name=FDT[1]->文件名; #其实SFT中保存的是inode或者其它类似的东东,为了便于理解这里换成文件名
offset = FDT[1]->offset;
得到
没有图挺难描述的,大家凑合着看吧,待续 |
|