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 对象。 filenamemodebufsize 参数的解释方式与内置 open() 函数的解释方式相同。
posixfile.fileopen(fileobject)
使用给定的标准文件对象创建一个新的 posixfile 对象。 生成的对象与原始文件对象具有相同的文件名和模式。

posixfile 对象定义了以下附加方法:

posixfile.lock(fmt[, len[, start[, whence]]])
锁定文件对象所引用的文件的指定部分。 下面的表格解释了该格式。 len 参数指定应该被锁定的部分的长度。 默认值为 0start指定section的起始偏移量,默认为0whence 参数指定偏移量的相对位置。 它接受常量 SEEK_SETSEEK_CURSEEK_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)

笔记:

  1. 返回的锁的格式为 (mode, len, start, whence, pid),其中 mode 是表示锁类型('r' 或 'w')的字符。 此修饰符阻止请求被授予; 它仅用于查询目的。

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

格式 意义
a 仅附加标志
c 关闭 exec 标志
n 无延迟标志(也称为非阻塞标志)
s 同步标志

此外,可以向格式添加以下修饰符:

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

笔记:

  1. != 修饰符是互斥的。
  2. 此字符串表示可能已被同一调用更改后的标志。

例子:

import posixfile

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