这些 API 是用于内置文件对象的 Python 2 C API 的最小仿真,使用依赖缓冲 I/O (
FILE*
) 支持来自 C 标准库。在 Python 3,文件和流使用新
io
模块,其在 OS 低级无缓冲 I/O 之上定义了几个层。下文描述的函数是这些新 API 之上的方便 C 包裹器,且主要意味着解释器报告的内部错误;建议第 3 方代码访问
io
API 代之。
PyFile_FromFd
(
int
fd
, const char
*name
, const char
*mode
, int
buffering
, const char
*encoding
, const char
*errors
, const char
*newline
, int
closefd
)
¶
Create a Python file object from the file descriptor of an already opened file
fd
。自变量
name
,
encoding
,
errors
and
newline
可以是
NULL
to use the defaults;
buffering
可以是
-1
to use the default.
name
is ignored and kept for backward compatibility. Return
NULL
on failure. For a more comprehensive description of the arguments, please refer to the
io.open()
function documentation.
警告
Since Python streams have their own buffering layer, mixing them with OS-level file descriptors can produce various issues (such as unexpected ordering of data).
3.2 版改变: 忽略 name 属性。
PyObject_AsFileDescriptor
(
PyObject
*p
)
¶
Return the file descriptor associated with
p
as an
int
. If the object is an integer, its value is returned. If not, the object’s
fileno()
method is called if it exists; the method must return an integer, which is returned as the file descriptor value. Sets an exception and returns
-1
当故障时。
PyFile_GetLine
(
PyObject
*p
, int
n
)
¶
相当于
p.readline([n])
, this function reads one line from the object
p
.
p
may be a file object or any object with a
readline()
方法。若
n
is
0
, exactly one line is read, regardless of the length of the line. If
n
大于
0
, no more than
n
bytes will be read from the file; a partial line can be returned. In both cases, an empty string is returned if the end of the file is reached immediately. If
n
小于
0
, however, one line is read regardless of length, but
EOFError
is raised if the end of the file is reached immediately.