2012-03-17 51 views
1

我試圖理解下面的代碼:閱讀和寫作上的I/O端口

#include<stdio.h> 
#include<stdlib.h> 
#include<sys/io.h> 

#define baseport 0x378 

int main() 
{ 
    int b; 
    if(ioperm(baseport,3,1)) 
    { 
     perror("ioperm"); 
     exit(1); 
    } 
    outb(0,baseport); 

    usleep(1000000); 
    printf("\n the status: %x,\n",inb(baseport)); 

    if (ioperm(baseport,3,0)) {perror("ioperm"); exit(1);} 

    exit(0); 
} 

輸出爲0xFF,255十進制的,不管我寫上的端口1(使用outb())端口0。我不明白爲什麼當我寫0時它是255。

+0

什麼的應該是端口後面,並且它應該返回別的不是0xFF的? – Mat 2012-03-17 14:38:21

+0

@mat其並行端口我沒有任何附加的0x378 – karan421 2012-03-17 15:02:17

+2

是輸出端口,而不是輸入端口。 – 2012-03-17 15:31:48

回答

5

做INB(的0x378)的結果是依賴於硬件的。有些芯片會返回先前寫出的值,而其他一些芯片只會返回垃圾。無論如何,它是而不是用於從潛在連接的設備讀取字節的端口。

+0

如果INB不讀端口上的字節,然後它是幹什麼用的....請解釋一下,因爲我是新手....... – karan421 2012-03-17 17:13:48

+4

@karan - 一些端口只是輸出,就像一個連接到打印機。你會從打印機上讀什麼? – 2012-03-17 18:14:05

+0

@BoPersson:它的狀態,但是再次,這是在不同的,只讀的端口IIRC。 – ninjalj 2012-03-31 11:14:54

-1

第一次看到,該端口可以如何表現,爲輸入或輸出或兩者!!! ..如果它可以被配置爲兩個..你必須設置爲相應的模式,那麼只有你能指望正確的行爲..