gpt4 book ai didi

c - POSIX 系统清除未完全解锁的文件锁的顺序是什么?

转载 作者:太空狗 更新时间:2023-10-29 15:36:48 24 4
gpt4 key购买 nike

POSIX specification for fcntl()状态:

All locks associated with a file for a given process shall be removed when a file descriptor for that file is closed by that process or the process holding that file descriptor terminates.

这个解锁由已终止进程持有的文件段锁的操作是每个文件的原子操作吗?换句话说,如果一个进程锁定了文件的字节段 B1..B2 和 B3..B4 但在终止前没有解锁这些段,当系统开始解锁它们时,是段 B1..B2 和 B3。 .B4 在另一个fcntl() 操作锁定文件的一段之前都已解锁能否成功?如果不是每个文件的原子,系统解锁这些文件段的顺序是否取决于最初获取文件段的顺序?

fcntl() 的规范没有说明,但也许 POSIX 规范中有一个一般规定,要求在进程不正常退出或崩溃后进行清理操作的确定性顺序。

最佳答案

section 2.9.7 中有部分答案,线程与常规文件操作的交互,POSIX 规范:

All of the functions chmod(), close(), fchmod(), fcntl(), fstat(), ftruncate(), lseek(), open(), read(), readlink(), stat(), symlink(), and write() shall be atomic with respect to each other in the effects specified in IEEE Std 1003.1-2001 when they operate on regular files. If two threads each call one of these functions, each call shall either see all of the specified effects of the other call, or none of them.

因此,对于常规文件,如果进程的线程持有文件段上的锁并在与文件关联的最后一个文件描述符上调用 close(),则 close()(包括删除进程持有的文件上所有未完成的锁)对于调用 fcntl() 的线程的影响而言是原子的另一个进程锁定文件的一段。

exit() 的规范状态:

These functions shall terminate the calling process with the following consequences:

  • All of the file descriptors, directory streams[, conversion descriptors, and message catalog descriptors] open in the calling process shall be closed.

  • ...

据推测,打开的文件描述符好像通过适当调用close() 关闭,但不幸的是,规范没有说明打开的文件描述符是如何“关闭”的。

2004 规范在异常进程终止步骤方面似乎更加模糊。我唯一能找到的是 abort() 的文档.至少在 2008 规范中,有一个标题为 Consequences of Process Termination 的部分在 _Exit() 的页面上。不过,措辞仍然是:

  • All of the file descriptors, directory streams, conversion descriptors, and message catalog descriptors open in the calling process shall be closed.

更新:我刚刚打开了 issue 0000498 in the Austin Group Defect Tracker .

关于c - POSIX 系统清除未完全解锁的文件锁的顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7622279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com