Python mmap / dev / port
Question
Est-il possible de mmap / dev / port? Je n'obtiens pas un tel appareil quand j'essaye.
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
>>>
J'ai pu mmap un fichier régulier avec les mêmes options.
La solution
ERRNO 19 est répertorié comme «aucun dispositif de ce type» (Linux), ou «Opération non pris en charge par l'appareil» (FreeBSD).
Regarder le code source pour /dev/port
dans drivers/char/mem.c
, en particulier le struct file_operations
, tu voir:
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
Cet appareil ne prend pas en charge MMAP. Ouverture, recherche, lecture et écriture seulement.
Autres conseils
Comme cela a été souligné, /dev/port
not mmap
-pouvoir. Mais vu comment vous utilisez Python - exploitons le vrai pouvoir des types dynamiques! Pourquoi ne pas créer un mmap
-Le objet qui prend en charge la même interface, mais utilise lseek
sous?