These APIs are a minimal emulation of the Python 2 C API for built-in file objects, which used to rely on the buffered I/O (
FILE*
) support from the C standard library. In Python 3, files and streams use the new
io
module, which defines several layers over the low-level unbuffered I/O of the operating system. The functions described below are convenience C wrappers over these new APIs, and meant mostly for internal error reporting in the interpreter; third-party code is advised to access the
io
APIs instead.
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
. The arguments
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 版改变: Ignore 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
is less than
0
, however, one line is read regardless of length, but
EOFError
is raised if the end of the file is reached immediately.
PyFile_SetOpenCodeHook
(
Py_OpenCodeHookFunction
handler
)
¶
Overrides the normal behavior of
io.open_code()
to pass its parameter through the provided handler.
The handler is a function of type
PyObject *(*)(PyObject *path,
void *userData)
,其中
path
is guaranteed to be
PyUnicodeObject
.
userData pointer is passed into the hook function. Since hook functions may be called from different runtimes, this pointer should not refer directly to Python state.
As this hook is intentionally used during import, avoid importing new modules during its execution unless they are known to be frozen or available in
sys.modules
.
Once a hook has been set, it cannot be removed or replaced, and later calls to
PyFile_SetOpenCodeHook()
will fail. On failure, the function returns -1 and sets an exception if the interpreter has been initialized.
调用此函数是安全的先于
Py_Initialize()
.
引发
审计事件
setopencodehook
不带自变量。
3.8 版新增。