非常教程

Python参考手册

Unix

fcntl

该模块对文件描述符执行文件控制和I / O控制。它是fcntl()ioctl()Unix例程的接口。有关这些调用的完整说明,请参阅fcntl(2)ioctl(2) Unix手册页。

该模块中的所有函数都将文件描述符fd作为其第一个参数。 这可以是一个整数文件描述符,例如sys.stdin.fileno()返回的整数文件描述符,或者是一个文件对象,比如sys.stdin本身,它提供了一个fileno(),它返回一个真正的文件描述符。

该模块定义了以下功能:

fcntl.fcntl(fd, op[, arg])

对文件描述符fd执行操作op(也接受提供fileno()方法的文件对象)。用于for的值取决于操作系统,可在fcntl模块中作为常量使用,使用与相关C头文件中使用的名称相同的名称。参数arg是可选的,默认为整数值0.存在时,它可以是整数值或字符串。缺少参数或整数值时,此函数的返回值是C fcntl()调用的整数返回值。当参数是一个字符串时,它表示二进制结构,例如由struct.pack()创建。二进制数据被复制到一个缓冲区,该缓冲区的地址被传递给C fcntl()调用。成功调用后的返回值是缓冲区的内容,转换为字符串对象。返回的字符串的长度将与arg参数的长度相同。这限制为1024字节。如果操作系统在缓冲区中返回的信息大于1024字节,这很可能导致分段违规或更微妙的数据损坏。

如果fcntl()失败,则提出IOError

fcntl.ioctl(fd, op[, arg[, mutate_flag]])

该函数与fcntl()函数相同,除了操作通常在库模块termios中定义并且参数处理更加复杂。

op参数限制为可以适合32位的值。 用作op参数的其他常量可以在termios模块中找到,其名称与相关C头文件中使用的名称相同。

参数arg可以是整数,不存在(与整数0相同),支持只读缓冲区接口(很可能是纯Python字符串)的对象或支持读写缓冲区接口的对象之一。

除最后一种情况外,其行为与fcntl()功能一样。

如果传递了一个可变缓冲区,则行为由mutate_flag 参数的值决定。

如果它是错误的,那么缓冲区的可变性将被忽略,行为与只读缓冲区相同,只是上面提到的1024字节限制是可以避免的 - 只要你传递的缓冲区至少和操作系统想要的一样长时间放在那里,则应该工作。

如果mutate_flag为true,那么缓冲区(实际上)传递给基础的ioctl()系统调用,后者的返回代码被传回给调用的Python,并且缓冲区的新内容反映ioctl()的动作。 这是一个小的简化,因为如果提供的缓冲区长度小于1024字节,它首先被复制到1024字节长的静态缓冲区中,然后传递给ioctl()并将其复制回提供的缓冲区。

如果没有提供mutate_flag,那么从Python 2.5开始默认为true,这是从版本2.3和2.4的变化。如果版本可移植性是优先级,则明确提供参数。

如果ioctl()失败,则会引发IOError异常。

一个例子:

>>> import array, fcntl, struct, termios, os
>>> os.getpgrp()
13341
>>> struct.unpack('h', fcntl.ioctl(0, termios.TIOCGPGRP, "  "))[0]
13341
>>> buf = array.array('h', [0])
>>> fcntl.ioctl(0, termios.TIOCGPGRP, buf, 1)
0
>>> buf
array('h', [13341])

fcntl.flock(fd, op)

在文件描述符fd上执行锁操作op(也接受提供fileno()方法的文件对象)。 有关详细信息,请参见Unix手册(2)。 (在某些系统上,这个函数是用fcntl()模拟的。)

如果flock()失败,则会引发IOError异常。

fcntl.lockf(fd, operation[, length[, start[, whence]]])

这本质上是fcntl()锁定调用的一个包装。fd是要锁定或解锁的文件的文件描述符,并且操作是以下值之一:

  • LOCK_UN - 开锁
  • LOCK_SH - 获得共享锁
  • LOCK_EX - 获得独家锁定

当操作是LOCK_SH或LOCK_EX时,它也可以与LOCK_NB按位或运算,以避免在锁定采集时阻塞。 如果使用LOCK_NB并且无法获取锁,则会引发IOError,并且该异常的errno属性将设置为EACCES或EAGAIN(取决于操作系统;为便于携带,请检查这两个值)。 至少在某些系统上,只有在文件描述符指向为写入而打开的文件时才能使用LOCK_EX。

length是要锁定的字节数,start是锁开始的字节偏移量,相对于此,以及与io.IOBase.seek()相同,具体为:

  • 0- 相对于文件的开始(os.SEEK_SET
  • 1- 相对于当前缓冲区的位置(os.SEEK_CUR
  • 2- 相对于文件的结尾(os.SEEK_END

start 的默认值是0,这意味着从文件的开头开始。length的默认值为0,这意味着锁定到文件的末尾。whence的默认值也是0。

示例(全部在SVR4兼容系统上):

import struct, fcntl, os

f = open(...)
rv = fcntl.fcntl(f, fcntl.F_SETFL, os.O_NDELAY)

lockdata = struct.pack('hhllhh', fcntl.F_WRLCK, 0, 0, 0, 0, 0)
rv = fcntl.fcntl(f, fcntl.F_SETLKW, lockdata)

请注意,在第一个示例中,返回值变量rv将保存一个整数值; 在第二个例子中它将保存一个字符串值。lockdata变量的结构布局是依赖于系统的 - 因此使用这个flock()调用可能会更好。

扩展内容

模块操作系统如果os模块中存在锁定标志O_SHLOCK和O_EXLOCK(仅在BSD上),os.open()函数提供了lockf()和flock()函数的替代方法。

Python

Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于1991年。 Python 是纯粹的自由软件, 源代码和解释器 CPython 遵循 GPL 协议。Python 语法简洁清晰,特色之一是强制用空白符( white space )作为语句缩进。

主页 https://www.python.org/
源码 https://github.com/python/cpython
版本 2.7
发布版本 2.7.13

Python目录

1.内置常量 | Built-in Constants
2.内置例外 | Built-in Exceptions
3.内置函数 | Built-in Functions
4.内置类型 | Built-in Types
5.编译器 | Compiler
6.加密 | Cryptography
7.数据压缩 | Data Compression
8.数据持久性 | Data Persistence
9.数据类型 | Data Types
10.调试和分析 | Debugging & Profiling
11.开发工具 | Development Tools
12.文件和目录访问 | File & Directory Access
13.文件格式 | File Formats
14.构架 | Frameworks
15.输入 | Importing
16.输入/输出 | Input/ouput
17.国际化 | Internationalization
18.网络 | Internet
19.网络数据 | Internet Data
20.翻译 | Interpreters
21.语言 | Language
22.记录 | Logging
23.Mac OS
24.MS Windows
25.多媒体 | Multimedia
26.联网 | Networking
27.数字与数学 | Numeric & Mathematical
28.操作系统 | Operating System
29.可选操作系统 | Optional Operating System
30.限制执行 | Restricted Execution
31.运行 | Runtime
32.SGI IRIX
33.软件包装与分销 | Software Packaging & Distribution
34.字符串 | String
35.结构化标记 | Structured Markup
36.Tk
37.Unix
38.Python 简介
39.Python pass 语句
40.Python 循环嵌套
41.Python 运算符
42.Python log10() 函数
43.Python log() 函数
44.Python floor() 函数
45.Python fabs() 函数
46.Python exp() 函数
47.Python cmp() 函数
48.Python ceil() 函数
49.Python abs() 函数
50.Python Number(数字)
51.Python pow() 函数
52.Python modf() 函数
53.Python min() 函数
54.Python max() 函数
55.Python asin() 函数
56.Python acos() 函数
57.Python uniform() 函数
58.Python shuffle() 函数
59.Python seed() 函数
60.Python random() 函数
61.Python randrange() 函数
62.Python choice() 函数
63.Python sqrt() 函数
64.Python round() 函数
65.Python radians() 函数
66.Python degrees() 函数
67.Python tan() 函数
68.Python sin() 函数
69.Python hypot() 函数
70.Python cos() 函数
71.Python atan2() 函数
72.Python atan() 函数
73.Python 元组
74.Python 列表(List)
75.Python 字符串
76.Python 字典(Dictionary)
77.Python 日期和时间
78.Python 函数
79.Python 模块
80.Python capitalize()方法
81.Python center()方法
82.Python count() 方法
83.Python expandtabs()方法
84.Python endswith()方法
85.Python encode()方法
86.Python decode()方法
87.Python find()方法
88.Python index()方法
89.Python 异常处理
90.Python isspace()方法
91.Python isnumeric()方法
92.Python islower()方法
93.Python isdigit()方法
94.Python isalpha()方法
95.Python isalnum()方法
96.Python isupper()方法
97.Python istitle()方法
98.Python min()方法
99.Python max()方法
100.Python maketrans()方法