Python mmap /dev/port
Возможно ли использовать mmap /dev/port? Я получаю "Нет такого устройства", когда я пытаюсь.
Python 2.7.2+ (default, Oct 4 2011, 20:06:09)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import mmap
>>> os.open('/dev/port', os.O_RDWR|os.O_NDELAY)
3
>>> mapfd = mmap.mmap(3, 0xfff)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
mmap.error: [Errno 19] No such device
>>>
Я был в состоянии отобразить обычный файл с теми же параметрами.
2 ответа
Решение
Ошибка 19 указана как "Нет такого устройства" (Linux) или "Операция, не поддерживаемая устройством" (FreeBSD).
Глядя на исходный код для /dev/port
в drivers/char/mem.c
особенно struct file_operations
вы увидите:
770 #ifdef CONFIG_DEVPORT
771 static const struct file_operations port_fops = {
772 .llseek = memory_lseek,
773 .read = read_port,
774 .write = write_port,
775 .open = open_port,
776 };
777 #endif
Это устройство не поддерживает mmap. Только открытие, поиск, чтение и письмо.
Как уже было отмечено, /dev/port
не mmap
-able. Но посмотрим, как вы используете Python - давайте использовать всю мощь динамических типов! Почему бы не создать mmap
-подобный объект, который поддерживает тот же интерфейс, но использует lseek
под?