2015-10-29 2 views
-2

Я думаю, что мы можем работать с файлами двумя способами: напрямую с ядром (как дескриптор файла) и с указателями (на языках высокого уровня как C).Как управлять файловыми объектами python?

Итак, файлы управляются одинаково в Python (например, как указатель файлов, например, на C)? Создаем ли указатель на файл при использовании функции open() в Python ?.

+5

Вы спрашиваете о Python и называете * C * языком высокого уровня? – jonrsharpe

ответ

4

В средах, совместимых с 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 допускают определенные операции ввода-вывода файлов.

Смежные вопросы