文件系统内部结构(8)
13.4.9 "Write(写入)"系统调用
"Write(写入)"系统调用格式如下
number= Write (fd, buffer, count),其中:
fd是文件描述符。buffer表示要写到文件的数据在内存中的起始地址。count表示要写入的字节数,number表示执行该系统调用后实际写入的字节数。通常,number的取值和count的取值相同,除非该系统调用失败。
这个系统调用和"Read"系统调用很相似。它的格式以及不同参数的含义以及该系统调用的实现也和"Read"系统调用的相似。因此,这里并不讨论细节内容。两者唯一差别列举如下:
如果某个块只有一部分内容要写,内核就要先读入该块,然后在将块写回磁盘前,将内存中要写的字节移动到块的合适位置,这样就不会覆盖现有数据,这些数据也不会丢失了。图13-22描述了该过程。
如果所有可分配给文件的块用完了,那么也许就要分配新块。这就有必要调用相关系统调用或算法,这些系统调用或算法获取空闲块或将这些空闲块加载到索引节点或间接索引结构,然后从空闲块链表中解除这些块的链接。对"读取"系统调用而言,这是不必要的。
图13-22 对部分块的写操作 |