2012-02-21 13 views
2

/dev/portをmmapすることはできますか?私は試してみると「そのようなデバイスはありません」と表示されています。Python 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 
>>> 

通常のファイルを同じオプションでmmapできました。

+0

'/ dev/port'をmmapingすることの意味は? mmaping '/ dev/mem'は意味があり、'/dev/port'はそうではありません。 – ninjalj

+0

@ninjaljこれは、読み書きの前にシークすることなく、ioport addrに直接書き込むことができます。 – tMC

+0

多分ctypesでpwriteを使用していますか? – sherpya

答えて

4

Errno 19は「このようなデバイスはありません」(Linux)または「デバイスでサポートされていない操作」(FreeBSD)としてリストされています。 drivers/char/mem.c/dev/portのソースコードを見てみると

、特にstruct file_operationsは、あなたがseeよ:

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をサポートしていません。オープン、シーク、リーディング、ライティングのみ。

+0

カーネルソースを指すための+1。私のkernel-fuは素晴らしいものではありません。 – tMC

0

指摘したように、/dev/portmmap可能ではありません。しかし、あなたがどのようにPythonを使っているかを見てみましょう。動的な型の本当の力を利用しましょう!同じインターフェイスをサポートするの下にmmapのようなオブジェクトを作成してみませんか?