编写系统调用并阻止进程

时间:2014-05-26 21:10:04

标签: unix linux-kernel posix system

在UNIX中:读取系统调用会阻止该过程,直到完成为止。

系统调用的行为如何?它是否在磁盘上写入时阻止进程?

使用write系统调用我的意思是写(fd,bf,nbyte)过程调用。

1 个答案:

答案 0 :(得分:6)

不,它只会阻止进程,直到缓冲区的内容被复制到内核空间。这通常 非常短的时间,但在某些情况下它可能会等待一些磁盘操作:

  • 如果没有免费页面,则必须释放一些页面。如果有干净的页面,它们的内容可以被丢弃(因为它只是从磁盘复制),但如果没有,则必须清洗一些页面,这涉及写入。由于页面会在几秒钟后自动清洗,因此如果您有足够的内存,这几乎不会发生。
  • 如果写入到文件的中间,则周围的内容可能需要读取,因为页面缓存具有页面粒度(在大多数平台上对齐4个KiB块)。这种情况很少发生,因为很少在没有读取文件的情况下更新文件,如果您先阅读它,内容就会被缓存。

如果您想等到数据实际上达到了数据,您需要跟进fsync(2)