当我发出时write()
,我的数据会进入一些内核空间缓冲区。对物理层的实际提交(“phy-commit”)(可能)被推迟,直到……(直到发生什么事件?)
close()
当我为文件描述符发出 a 时,然后
如果 [...],则释放与打开文件描述相关的资源
这是否意味着释放(释放)那些包含我的数据的内核缓冲区?这些缓冲区中包含的宝贵数据会怎样?会迷路?
如何防止这种损失?
通过fsync()
?它请求一个明确的 phy-commit。我想要么立即(同步调用),要么只推迟“短时间”并排队等待后续操作,至少是破坏性操作。
但我不太想要立即或紧急的 phy-commit。只是(保留我的数据并且)不要忘记稍后再做 phy-commit。
来自man fclose
:
fclose() 函数 [...] 关闭底层文件描述符。
...
fclose() 仅刷新 C 库提供的用户空间缓冲区。为确保数据物理存储在磁盘上,内核缓冲区也必须刷新,例如使用 sync(2) 或 fsync(2)。
它可能暗示 thatfsync
不必在(或, 其中包含 a )之前 ,但可以(甚至必须)在它之后。所以不会是非常具有破坏性...close
fclose
close
close()