#include #include #include #define IO_FREE 0 #define IO_KEEP 1 /* output I/O port */ void outp(unsigned short addr,unsigned char data) { outb(data,addr); } /* Init I/O port */ int keepPort(unsigned short addr) { if(ioperm(addr,1,IO_KEEP) != 0){ printf("Error:Can not access I/O port. Must be root.\n"); exit(1); } } /* Init I/O port */ int freePort(unsigned short addr) { if(ioperm(addr,1,IO_FREE) != 0){ printf("Error:Can not access I/O port. Must be root.\n"); exit(1); } } int main(int argv, char **argc) { unsigned short addr; /* default addr 0x378 */ unsigned char data; switch(argv){ case 2: addr = 0x378; break; case 3: addr = (unsigned short)strtol(argc[2], (char**)NULL, 16); break; default: printf("Usage: paraport PORT_DATA [PORT_ADDR]\n"); return 0; } data = (unsigned char)strtol(argc[1], (char**)NULL, 16); printf("PORT_ADDR:0x%04X PORT_DATA:0x%02X\n", addr, data); keepPort(addr); outp(addr, data); freePort(addr); return 0; }