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 *]]])

    • 锁定文件对象所引用的文件的指定部分。格式在下表中说明。 * len *参数指定应锁定的节的长度。默认值为0。 * start *指定该部分的起始偏移量,默认值为0。 * whence 参数指定偏移量相对于的位置。它接受常量SEEK_SETSEEK_CURSEEK_END之一。默认值为SEEK_SET。有关参数的更多信息,请参见系统上的 fcntl(2)*手册页。
  • posixfile. flags([* flags *])

    • 为文件对象所引用的文件设置指定的标志。除非另有说明,否则将新标志与旧标志进行“或”运算。格式在下表中说明。如果没有* flags 参数,则返回指示当前标志的字符串(与?修饰符相同)。有关这些标志的更多信息,请参见系统上的* fcntl(2)*手册页。
  • posixfile. dup ( )

    • 复制文件对象以及基础文件指针和文件 Descriptors。结果对象的行为就好像它是新打开的一样。
  • posixfile. dup2(* fd *)

    • 复制文件对象以及基础文件指针和文件 Descriptors。新对象将具有给定的文件 Descriptors。否则,结果对象的行为就好像它是新打开的一样。
  • posixfile. file ( )

    • 返回 posixfile 对象所基于的标准文件对象。对于坚持标准文件对象的函数,有时这是必需的。

请求失败时,所有方法都会引发IOError

lock()方法的格式字符具有以下含义:

FormatMeaning
u解锁指定区域
r请求指定部分的读锁
w请求指定部分的写锁

另外,可以将以下修饰符添加到格式中:

ModifierMeaningNotes
|等到授予锁
?返回与请求的锁冲突的第一个锁;如果没有冲突,则返回None(1)

Note:

  • 返回的锁的格式为(mode, len, start, whence, pid),其中* mode *是表示锁类型(“ r”或“ w”)的字符。此修饰符可防止请求被批准;它仅用于查询目的。

flags()方法的格式字符具有以下含义:

FormatMeaning
a仅附加标志
c在 exec 标志上关闭
n无延迟标志(也称为非阻塞标志)
ssynchronization flag

另外,可以将以下修饰符添加到格式中:

ModifierMeaningNotes
!将指定的标志“关闭”,而不是默认的“打开”(1)
=替换标志,而不是默认的“ OR”操作(1)
?返回一个字符串,其中的字符表示所设置的标志。(2)

Notes:

  • !=修饰符是互斥的。

  • 该字符串表示在同一调用可能已更改标志之后的标志。

Examples:

import posixfile

file = posixfile.open('testfile', 'w')
file.lock('w|')
...
file.lock('u')
file.close()