我认为我们可以通过两种方式处理文件:直接使用内核(作为文件的描述符)和指针(在高级语言中作为C)。
那么,文件是否以相同的方式在Python中管理(例如文件指针在C中)? 在Python中使用open()函数时,我们是否创建了一个指向文件的指针?
答案 0 :(得分:4)
在UNIX派生或POSIX兼容环境中,所有文件I / O都通过" 文件描述符"。文件描述符是传递给各种OS系统调用的小整数。它们被设计成" 不透明手柄&#34 ;;它们本身没什么意义,它们只存在于文件I / O系统调用中。
许多语言实现了增值库,以便在内核提供的简单打开/关闭/读/写/搜索之外执行高级文件I / O.在C中,该库由#include <stdio.h>
描述。关联的数据结构是FILE*
(指向某种结构的指针的typedef)。鉴于第一段的要求,我们可以看到FILE*
必须以某种方式在内部存储文件描述符。
说C I / O通过指针是没有帮助的。 C程序从不直接检查FILE
。相反,FILE*
用作不透明句柄并传递给各种库调用。
在Python中,数据结构是内置类型file
。同样,如果要file
与OS进行交互,它也必须存储文件描述符。
如果Python file
通过FILE*
机制,通过其他一些增值库或直接通过文件在内部实现,那么这是一个实现细节,不值得考虑描述。我们确切知道的是,在POSIX上,file.write(python_buffer)
最终必须成为write(file_descriptor, buffer, len)
之类的系统调用。
至于你的具体问题,&#34;我们在Python中使用open()函数时是否创建了指向文件的指针?&#34;,问题是模糊的,因为&#34;指向文件的指针&#34 ;这不是一个特别有意义的短语。如果您的意思是&#34;口译员是否致电fopen()
来创建FILE*
?&#34;,那么答案就是&#34;可能。谁在乎?&#34;
是什么,重要的是要知道当我们在Python中调用open()
内置函数时,它会返回类型为file
的Python对象。 file
个对象允许某些文件I / O操作。