36.12. posixfile — 具有锁定支持的类文件对象 — Python 文档
来自菜鸟教程
Python/docs/2.7/library/posixfile
36.12. posix文件 — 具有锁定支持的类文件对象
自 1.5 版起已弃用: 该模块提供的锁定操作通过 fcntl.lockf() 调用完成得更好、更便携。
该模块在内置文件对象上实现了一些附加功能。 特别是,它实现了文件锁定、文件标志控制和一个简单的接口来复制文件对象。 该模块定义了一个新的文件对象,posixfile 对象。 它具有所有标准文件对象方法并添加了下面描述的方法。 该模块仅适用于某些类型的 Unix,因为它使用 fcntl.fcntl() 进行文件锁定。
要实例化 posixfile 对象,请使用 posixfile.open() 函数。 结果对象的外观和感觉与标准文件对象大致相同。
posixfile 模块定义了以下常量:
- posixfile.SEEK_SET
- 偏移量是从文件的开头计算的。
- posixfile.SEEK_CUR
- 偏移量是从文件中的当前位置计算的。
- posixfile.SEEK_END
- 偏移量是从文件末尾开始计算的。
posixfile 模块定义了以下函数:
- posixfile.open(filename[, mode[, bufsize]])
- 使用给定的文件名和模式创建一个新的 posixfile 对象。 filename、mode 和 bufsize 参数的解释方式与内置 open() 函数的解释方式相同。
- posixfile.fileopen(fileobject)
- 使用给定的标准文件对象创建一个新的 posixfile 对象。 生成的对象与原始文件对象具有相同的文件名和模式。
posixfile 对象定义了以下附加方法:
- posixfile.lock(fmt[, len[, start[, whence]]])
- 锁定文件对象所引用的文件的指定部分。 下面的表格解释了该格式。 len 参数指定应该被锁定的部分的长度。 默认值为
0
。 start指定section的起始偏移量,默认为0
。 whence 参数指定偏移量的相对位置。 它接受常量 SEEK_SET、SEEK_CUR 或 SEEK_END 之一。 默认值为 SEEK_SET。 有关参数的更多信息,请参阅系统上的 fcntl(2) 手册页。
- posixfile.flags([flags])
- 为文件对象所引用的文件设置指定的标志。 除非另有说明,否则新标志与旧标志进行 OR 运算。 下面的表格解释了该格式。 如果没有 flags 参数,则返回指示当前标志的字符串(这与
?
修饰符相同)。 有关这些标志的更多信息,请参阅系统上的 fcntl(2) 手册页。
- posixfile.dup()
- 复制文件对象和底层文件指针和文件描述符。 结果对象的行为就像是新打开的一样。
- posixfile.dup2(fd)
- 复制文件对象和底层文件指针和文件描述符。 新对象将具有给定的文件描述符。 否则,结果对象的行为就好像它是新打开的一样。
- posixfile.file()
- 返回 posixfile 对象所基于的标准文件对象。 这对于坚持标准文件对象的函数有时是必要的。
当请求失败时,所有方法都会引发 IOError
。
lock()
方法的格式字符具有以下含义:
格式 | 意义 |
---|---|
u
|
解锁指定区域 |
r
|
请求指定部分的读锁 |
w
|
请求指定部分的写锁 |
此外,可以向格式添加以下修饰符:
修饰符 | 意义 | 笔记 |
---|---|---|
等到锁定被授予 | ||
?
|
返回与请求的锁冲突的第一个锁,如果没有冲突,则返回 None 。
|
(1) |
笔记:
- 返回的锁的格式为
(mode, len, start, whence, pid)
,其中 mode 是表示锁类型('r' 或 'w')的字符。 此修饰符阻止请求被授予; 它仅用于查询目的。
flags()
方法的格式字符具有以下含义:
格式 | 意义 |
---|---|
a
|
仅附加标志 |
c
|
关闭 exec 标志 |
n
|
无延迟标志(也称为非阻塞标志) |
s
|
同步标志 |
此外,可以向格式添加以下修饰符:
修饰符 | 意义 | 笔记 |
---|---|---|
!
|
将指定的标志“关闭”,而不是默认的“打开” | (1) |
=
|
替换标志,而不是默认的“OR”操作 | (1) |
?
|
返回一个字符串,其中的字符代表设置的标志。 | (2) |
笔记:
!
和=
修饰符是互斥的。- 此字符串表示可能已被同一调用更改后的标志。
例子:
import posixfile
file = posixfile.open('testfile', 'w')
file.lock('w|')
...
file.lock('u')
file.close()