On this page
36.12. posixfile —具有锁定支持的类文件对象
从版本 1.5 开始不推荐使用:fcntl.lockf()调用可以更好,更方便地完成此模块提供的锁定操作。
该模块在内置文件对象上实现了一些其他Function。特别是,它实现了文件锁定,对文件标志的控制以及易于复制文件对象的接口。该模块定义了一个新的文件对象 posixfile 对象。它具有所有标准文件对象方法,并添加了以下描述的方法。该模块仅适用于某些 Unix 版本,因为它使用fcntl.fcntl()进行文件锁定。
要实例化 posixfile 对象,请使用posixfile.open()函数。生成的对象的外观和感觉与标准文件对象大致相同。
posixfile模块定义以下常量:
posixfile.
SEEK_SET
- 偏移量是从文件开头开始计算的。
posixfile.
SEEK_CUR
- 偏移是根据文件中的当前位置计算的。
posixfile.
SEEK_END
- 偏移量从文件末尾开始计算。
posixfile模块定义以下Function:
posixfile.
open
(* filename * [,* mode * [,* bufsize *]])- 使用给定的文件名和模式创建一个新的 posixfile 对象。 * filename , mode 和 bufsize *参数的解释方式与内置open()函数的解释方式相同。
posixfile.
fileopen
(* fileobject *)- 使用给定的标准文件对象创建一个新的 posixfile 对象。生成的对象与原始文件对象具有相同的文件名和模式。
posixfile 对象定义了以下其他方法:
posixfile.
lock
(* fmt * [,* len * [,* start * [,* whence *]]])posixfile.
flags
([* flags *])- 为文件对象所引用的文件设置指定的标志。除非另有说明,否则将新标志与旧标志进行“或”运算。格式在下表中说明。如果没有* flags 参数,则返回指示当前标志的字符串(与
?
修饰符相同)。有关这些标志的更多信息,请参见系统上的* fcntl(2)*手册页。
- 为文件对象所引用的文件设置指定的标志。除非另有说明,否则将新标志与旧标志进行“或”运算。格式在下表中说明。如果没有* flags 参数,则返回指示当前标志的字符串(与
posixfile.
dup
( )- 复制文件对象以及基础文件指针和文件 Descriptors。结果对象的行为就好像它是新打开的一样。
posixfile.
dup2
(* fd *)- 复制文件对象以及基础文件指针和文件 Descriptors。新对象将具有给定的文件 Descriptors。否则,结果对象的行为就好像它是新打开的一样。
posixfile.
file
( )- 返回 posixfile 对象所基于的标准文件对象。对于坚持标准文件对象的函数,有时这是必需的。
请求失败时,所有方法都会引发IOError。
lock()
方法的格式字符具有以下含义:
Format | Meaning |
---|---|
u |
解锁指定区域 |
r |
请求指定部分的读锁 |
w |
请求指定部分的写锁 |
另外,可以将以下修饰符添加到格式中:
Modifier | Meaning | Notes |
---|---|---|
| |
等到授予锁 | |
? |
返回与请求的锁冲突的第一个锁;如果没有冲突,则返回None 。 |
(1) |
Note:
- 返回的锁的格式为
(mode, len, start, whence, pid)
,其中* mode *是表示锁类型(“ r”或“ w”)的字符。此修饰符可防止请求被批准;它仅用于查询目的。
flags()
方法的格式字符具有以下含义:
Format | Meaning |
---|---|
a |
仅附加标志 |
c |
在 exec 标志上关闭 |
n |
无延迟标志(也称为非阻塞标志) |
s |
synchronization flag |
另外,可以将以下修饰符添加到格式中:
Modifier | Meaning | Notes |
---|---|---|
! |
将指定的标志“关闭”,而不是默认的“打开” | (1) |
= |
替换标志,而不是默认的“ OR”操作 | (1) |
? |
返回一个字符串,其中的字符表示所设置的标志。 | (2) |
Notes:
!
和=
修饰符是互斥的。该字符串表示在同一调用可能已更改标志之后的标志。
Examples:
import posixfile
file = posixfile.open('testfile', 'w')
file.lock('w|')
...
file.lock('u')
file.close()