В средах, совместимых с UNIX или POSIX, все файлы ввода/вывода проходят через «дескрипторы файлов». Дескрипторы файлов - это небольшие целые числа, которые передаются различным системным вызовам ОС. Они предназначены для «непрозрачных ручек»; они ничего не значат сами по себе, они существуют только для передачи системных вызовов ввода-вывода.
Многие языки реализуют библиотеки с добавлением значений для выполнения расширенного ввода-вывода файлов за пределы простого открытия/закрытия/чтения/записи/поиска, которые предоставляет ядро. В C эта библиотека описывается #include <stdio.h>
. Связанная структура данных - это FILE*
(typedef указателя на какую-либо структуру). Учитывая требования первого абзаца, мы видим, что FILE*
должен каким-то образом хранить файловый дескриптор.
Нельзя сказать, что C I/O проходит через указатели. C никогда не рассматривают напрямую FILE
. Скорее, FILE*
используется как непрозрачный дескриптор и передается на различные вызовы библиотеки.
В Python структура данных является встроенным типом file
. Аналогично, если file
должен взаимодействовать с ОС, он также должен хранить файловый дескриптор.
Это деталь реализации и не заслуживает рассмотрения, если Python's file
внутренне реализован через механизм FILE*
через какую-либо другую библиотеку добавочных значений или непосредственно через дескрипторы файлов. Все, что мы знаем наверняка, это то, что в POSIX file.write(python_buffer)
должен стать системным вызовом, например write(file_descriptor, buffer, len)
.
Что касается вашего конкретного вопроса: «Создаем ли указатель на файл при использовании функции open() в Python?», Вопрос неопределен, потому что «указатель на файл» не является особенно содержательной фразой. Если вы имели в виду: «Позволяет ли переводчик fopen()
создать FILE*
?», Тогда ответ «Может быть, кому это нужно?».
Что это правда, и что важно знать, что, когда мы называем встроенную функцию open()
в Python, он возвращает объект Python типа file
. То, что объекты file
допускают определенные операции ввода-вывода файлов.
Вы спрашиваете о Python и называете * C * языком высокого уровня? – jonrsharpe