<HTML ><HEAD ><TITLE > C $B%W%m%0%i%`$+$i(B I/O $B%]!<%H$r;H$&(B</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK REL="HOME" TITLE="Linux I/O $B%]!<%H%W%m%0%i%_%s%0(B mini-HOWTO" HREF="index.html"><LINK REL="PREVIOUS" TITLE="Introduction " HREF="intro.html"><LINK REL="NEXT" TITLE="$B3d$j9~$_(B (IRQ) $B$H(B DMA $B%"%/%;%9(B" HREF="irq.html"></HEAD ><BODY CLASS="SECT1" BGCOLOR="#FFFFFF" TEXT="#000000" ><DIV CLASS="NAVHEADER" ><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Linux I/O $B%]!<%H%W%m%0%i%_%s%0(B mini-HOWTO</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="intro.html" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="irq.html" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="SECT1" ><H1 CLASS="SECT1" ><A NAME="USING" >2. C $B%W%m%0%i%`$+$i(B I/O $B%]!<%H$r;H$&(B</A ></H1 ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="AEN28" >2.1. $BIaDL$NJ}K!(B</A ></H2 ><P >I/O $B%]!<%H$r%"%/%;%9$9$k$?$a$N%k!<%A%s$O(B <TT CLASS="FILENAME" >/usr/include/asm/io.h</TT > ($B$^$?$O%+!<%M%k$N%=!<%9%Q%C%1!<%8$NCf$N(B <TT CLASS="FILENAME" >linux/include/asm-i386/io.h</TT >) $B$KDj5A$5$l$F$$$^$9!#I,MW$J%k!<%A%s$O!"(B $B$3$NCf$G%$%s%i%$%s%^%/%m$H$7$FDj5A$5$l$F$$$^(B $B$9$N$G!"(B<TT CLASS="FILENAME" >#include <asm/io.h></TT > $B$H$9$k$@$1$G==J,$G$7$g$&!#FCJL$J%i%$%V%i%j$J$I$OITMW$G$9!#(B</P ><P >gcc ($B;d$NCN$k8B$jA4$F$N%P!<%8%g%s!"(Begcs $B$b4^$`(B) $B$+$i$N@)8B$N$?$a!"(B $B$3$l$i$N%k!<%A%s$r;H$&%=!<%9$r%3%s%Q%$%k$9$k$K$"$?$j!":GE,2=$r%*%s(B $B$K$9$k(B( <B CLASS="COMMAND" >gcc <TT CLASS="OPTION" >-O1</TT ></B > $B$^$?$O$=$l0J>e(B)$B!"$"$k$$(B $B$O(B <TT CLASS="LITERAL" >#include <asm/io.h></TT > $B$NA0$K(B <TT CLASS="LITERAL" >#define extern static</TT > $B$H$$$&@k8@$r(B $B$*$3$J$C$F$*$/(B<EM >$BI,MW(B</EM >$B$,$"$j$^$9!#(B ($B$"$H$G(B <TT CLASS="LITERAL" >#undef extern</TT > $B$7$F$*$/$N$r(B $BK:$l$J$$$h$&$K!#(B)</P ><P >$B%G%P%C%0$N$?$a$K!"(B($B>/$J$/$H$b:G6a$N(B gcc $B$G$O(B) <B CLASS="COMMAND" >gcc <TT CLASS="OPTION" >-g</TT > <TT CLASS="OPTION" >-O</TT ></B >$B$r;H$&$3$H$,$G$-$^$9$,!"(B $B:GE,2=$5$l$?%3!<%I$G$O%G(B $B%P%C%,$,JQ$J5sF0$r<($9$3$H$b$"$j$^$9!#$3$N$h$&$J>l9g$K$O!"(BI/O $B%]!<%H(B $B%"%/%;%9$r4^$s$@%3!<%I$rFHN)$7$?%U%!%$%k$K$7$F$*$$$F!"$=$N%U%!%$%k$N(B $B%3%s%Q%$%k$N;~$K$@$1:GE,2=$r%*%s$K$9$k$H$$$&J}K!$r;H$&$3$H$b$G$-$^$9!#(B</P ><DIV CLASS="SECT3" ><H3 CLASS="SECT3" ><A NAME="AEN45" >2.1.1. $B%Q!<%_%C%7%g%s(B</A ></H3 ><P >$B%]!<%H$r%"%/%;%9$9$kA0$K!"$=$N%]!<%H$r%"%/%;%9$9$k5v2D$r%W%m%0%i%`$KM?$((B $B$J$1$l$P$J$j$^$;$s!#$3$l$K$O!"(B<TT CLASS="FUNCTION" >ioperm()</TT > $B4X?t(B (<TT CLASS="FILENAME" >unistd.h</TT > $B$G@k8@$5$l!"%+!<%M%k$NCf$G(B $BDj5A$5$l$F$$$k(B)$B$r8F$S=P$7$^$9!#$3$N4X?t$O%W%m%0%i%`$N:G=i$NJ}$G(B( I/O $B%]!<%H(B $B%"%/%;%9$r$9$kA0$K(B)$B8F$S=P$9I,MW$,$"$j$^$9!#(B $B$3$N4X?t$N=q<0$O(B <TT CLASS="FUNCTION" >ioperm(from, num, turn_on)</TT >$B$G$9!#(B <TT CLASS="LITERAL" >from</TT >$B$O%"%/%;%9$r5v$9%]!<%H$N:G=i$N%"%I%l%9!"(B <TT CLASS="LITERAL" >num</TT >$B$O(B<TT CLASS="LITERAL" >from</TT >$B$+$i(B $B$$$/$D$NO"B3%"%I%l%9$N%"%/%;%9$r5v$9$+!"$r;XDj$7$^$9!#(B $BNc$($P!"(B<TT CLASS="FUNCTION" >ioperm(0x300, 5, 1)</TT > $B$O!"(B0x300 $B$+$i(B 0x304 ($B9g7W$G(B 5 $B$D$N%]!<%H(B)$B$KBP$9$k5v2D$r;XDj$7!":G8e$N%Q%i%a!<%?$G$O!"(B $B$=$N%]!<%H$KBP$9$k%"%/%;%95v2D$rM?$($k$N$+6X;_$9$k$N$+$rO@M}CM(B(true : 1 = $B%"%/%;%9$r5v2D$9$k(B, false : 0 = $B%"%/%;%9$r6X;_$9$k(B)$B$G;XDj$7$^$9!#(B $BO"B3$7$F$$$J$$%]!<%H$N>l9g$K$O!"J#?t2s(B<TT CLASS="FUNCTION" >ioperm()</TT > $B$r8F$S=P$7$F!"E,@Z$J5v2D$r;XDj$7$^$9!#(B $BJ8K!$N>\:Y$K4X$7$F$O(B <TT CLASS="LITERAL" >ioperm(2)</TT > $B$N%^%K%e%"%k(B $B%Z!<%8$r;2>H$7$F$/$@$5$$!#(B</P ><P ><TT CLASS="FUNCTION" >ioperm()</TT > $B$r8F$S=P$9$K$O!"$=$N%W%m%0%i%`$,(B root $BFC8"$GAv$C$F$$$k$3$H$,I,MW$G$9!#(B $B$D$^$j!"$=$N%W%m%0%i%`$r%k!<%H%f!<%6$G<B9T$9$k$+!"(Bsetuid root ($BLuCm(B: $B<B(B $B9T%U%!%$%k$N%*!<%J!<$r(B root $B$K$7$F$*$-!"(Bchmod 4755 hogehoge $B$H$$$&$d$D(B $B$G$9!#(B)$B$7$F$*$/I,MW$,$"$j$^$9!#(B $BI,MW$J%]!<%H$KBP$9$k5v2D$r(B <TT CLASS="FUNCTION" >ioperm()</TT > $B$GM?$((B $B$?$"$H$K!"(Broot $BFC8"$rMn$9$3$H$b$G$-$^$9!#(B $B%W%m%0%i%`$N:G8e$G!"L@<(E*$K(B <TT CLASS="FUNCTION" >ioperm(..., 0)</TT > $B$r8F$S=P$7$F5v2D$rMn$9I,MW$O$"$j$^$;$s!#(B $B$3$l$O%W%m%0%i%`$N=*N;;~$K<+F0E*$K9T$J$o$l$^$9$+$i!#(B</P ><P >root $B0J30$N%f!<%6$K(B <TT CLASS="FUNCTION" >setuid()</TT > $B$9$k$3$H$G(B <TT CLASS="FUNCTION" >ioperm()</TT > $B$NM?$($?%]!<%H%"%/%;%95v2D$,(B $B$J$/$J$k$3$H$O$"$j$^$;$s$,!"0lJ}$G(B <TT CLASS="FUNCTION" >fork()</TT > $B$9$k$H5v2D$,$J$/$J$j$^$9!#(B ($B;R%W%m%;%9$O%"%/%;%95v2D$r;}$C$F$$$^$;$s$,!"?F%W%m%;%9$O;}$C$F$$$^$9!#(B)</P ><P ><TT CLASS="FUNCTION" >ioperm()</TT > $B$G$O!"(B0x000 $B$+$i(B 0x3ff $B$^$G$N(B $B%]!<%H$KBP$9$k%"%/%;%95v2D$7$+M?$($k$3$H$O$G$-$^$;$s!#(B $B$3$l$h$j$b>e$N%]!<%H$KBP$7$F$O!"(B<TT CLASS="FUNCTION" >iopl()</TT > $B$r;H$&I,MW$,$"$j$^$9!#(B (<TT CLASS="FUNCTION" >iopl()</TT > $B$r;H$&$H0lEY$K$9$Y$F$N%]!<%H$KBP(B $B$9$k%"%/%;%95v2D$rM?$($k$3$H$K$J$j$^$9!#(B) <EM >$B$9$Y$F$N(B</EM >$B%]!<%H$KBP$7$F%"%/%;%95v2D$rM?$($k$K$O!"(B $B%l%Y%k%Q%i%a!<%?$H$7$F!V(B3$B!W$r;H$$$^$9!#$D$^$j!"(B<TT CLASS="FUNCTION" >iopl(3)</TT > $B$H$$$&4X?t8F$S=P$7$r$7$^$9!#(B ($B4V0c$C$?%]!<%H$K%"%/%;%9$9$k$H$H$s$G$b$J$$$3$H$,5/$-$k$+$bCN$l$^$;$s(B $B$+$i!";H$&$H$-$K$OCm0U$7$F$/$@$5$$!#(B) $B$b$A$m$s!"(B<TT CLASS="FUNCTION" >iopl()</TT > $B$r8F$S=P$9;~$K$O(B root $BFC8"$,I,MW$G$9!#(B $B>\:Y$K4X$7$F$O(B <TT CLASS="LITERAL" >iopl(2)</TT > $B$N%^%K%e%"%k%Z!<%8$r(B $B;2>H$7$F$/$@$5$$!#(B</P ></DIV ><DIV CLASS="SECT3" ><H3 CLASS="SECT3" ><A NAME="AEN73" >2.1.2. $B%]!<%H$N%"%/%;%9(B</A ></H3 ><P >$B%]!<%H$+$i%P%$%H%G!<%?(B(8bit)$B$rF~NO$9$k>l9g$K$O(B <TT CLASS="FUNCTION" >inb(port)</TT > $B$r8F$S=P$7$^$9!#(B $B$3$N4X?t$O%P%$%H%G!<%?$rJV$7$^$9!#(B $B%]!<%H$K%P%$%H%G!<%?$r=PNO$9$k$K$O!"(B<TT CLASS="FUNCTION" >outb(value, port)</TT > $B$r8F$S=P$7$^$9!#(B ($B%Q%i%a!<%?$N=gHV$KCm0U$7$F2<$5$$!#(B) ($BLuCm(B:$B%"%;%s%V%i$d!"(BMS-DOS $B$N%3%s%Q%$%i%i%$%V%i%j$J$I$N>l9g$H$O5U$G$9!#(B) $B%]!<%H%"%I%l%9(B <TT CLASS="LITERAL" >x</TT > $B$H(B <TT CLASS="LITERAL" >x+1 </TT >$B$+$i%o!<%I%G!<%?$rF~NO$9$k>l9g$K$O(B <TT CLASS="FUNCTION" >inw(x)</TT > $B$r8F$S=P$7$^$9!#(B($B%"%;%s%V%i$N(B<TT CLASS="FUNCTION" >inw</TT > $B$H$^$C$?$/F1$8$h$&$K$=$l$>$l$N%]!<%H$+$i(B 1 $B%P%$%H$:$DFI$s$G$-$F!"%o!<%I(B $B%G!<%?$r9=@.$9$k$o$1$G$9$,!#(B) $B$U$?$D$N%]!<%H$K%o!<%I(B( 2 $B%P%$%H(B)$B$r=PNO$9$k$K$O(B <TT CLASS="FUNCTION" >outw(value, x)</TT > $B$r;H$$$^$9!#(B $B$I$A$i$NL?Na(B($B%P%$%H%G!<%?$+%o!<%I%G!<%?$+(B)$B$r;H$($P$$$$$N$+J,$+$i$J$$$H$-$O!"(B $BB?J,!"(B<TT CLASS="FUNCTION" >inb()</TT > $B$H(B <TT CLASS="FUNCTION" >outb()</TT > $B$r;H$($P$$$$$G$7$g$&!#(B $BBgDq$N%G%P%$%9$O%P%$%HC10L$N%]!<%H%"%/%;%9$r$9$k$h$&@_7W$5$l$F$$$^$9!#(B $B%]!<%H%"%/%;%9$NL?Na$O$9$Y$F<B9T$K>/$J$/$H$bLs(B 1 $B%^%$%/%mIC$+$+$k$N$G(B $BCm0U$7$F$/$@$5$$!#(B</P ><P ><TT CLASS="FUNCTION" >inb_p()</TT >, <TT CLASS="FUNCTION" >outb_p()</TT >, <TT CLASS="FUNCTION" >inw_p()</TT >, <TT CLASS="FUNCTION" >outw_p()</TT > $B$H$$$C$?%^%/%m$O!">e$K=R$Y$?$N$H(B $BF1$8F0:n$r$7$^$9$,!"%]!<%H$K%"%/%;%9$7$?8e$K>/$7$@$1(B($BLs(B 1 $B%^%$%/%mIC(B) $B%&%(%$%H$7$^$9!#(B <TT CLASS="LITERAL" >#include <asm/io.h></TT > $B$NA0$K(B <TT CLASS="LITERAL" >#define REALLY_SLOW_IO</TT > $B$r(B $BIU$12C$($k$H$3$N%&%(%$%H;~4V$r(B 4 $B%^%$%/%mIC$KJQ$($k$3$H$,$G$-$^$9!#(B $B$3$l$i$N%^%/%m$ODL>o!"(B0x80 $BHVCO$N(B I/O $B%]!<%H$K=PNO$9$k$3$H$G%&%(%$%H$r(B $B<B8=$7$F$$$^$9!#(B (<TT CLASS="LITERAL" >#define SLOW_IO_BY_JUMPING</TT > $B$H$7$F$$$k>l9g$K$OJL$NJ}K!$,;H$o$l$^$9$,!"$3$l$O$"$^$j@53N$JCY1d(B $B$r$*$3$J$&$3$H$,$G$-$J$$$O$:$G$9!#(B) $B$3$N$h$&$JM}M3$+$i!"(B0x80 $BHVCO$N%]!<%H$KBP$9$k(B <TT CLASS="FUNCTION" >ioperm()</TT > $B$r@h$K<B9T$7$F$*$/I,MW$,(B $B$"$j$^$9!#(B(0x80 $BHVCO$N%]!<%H$KBP$9$k=PNO$O%7%9%F%`$KBP$7$F$J$s$i1F6A$r(B $BM?$($k$3$H$O$J$$$O$:$G$9!#(B) $B$5$i$K$5$^$6$^$JCY1d$r9T$J$&J}K!$K$D$$$F$O!"0J2<$rFI$_?J$a$F2<$5$$!#(B</P ><P >$B$=$3$=$3:G6a$N%j%j!<%9$N(B Linux $B%^%K%e%"%k%Z!<%8$K$O!"(B <TT CLASS="LITERAL" >ioperm(2)</TT > $B$d(B <TT CLASS="LITERAL" >iopl(2)</TT >$B!">e=R$N%^%/%m$K4X$9$k@bL@$,$"$j$^$9!#(B</P ></DIV ></DIV ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="AEN97" >2.2. I/O $B%]!<%H%"%/%;%9$r$9$kJL$NJ}K!!'(B<TT CLASS="LITERAL" >/dev/port</TT ></A ></H2 ><P >I/O $B%]!<%H$K%"%/%;%9$9$k$b$&0l$D$NJ}K!$O!"(B<TT CLASS="FUNCTION" >open()</TT > $B$r;H$C$F(B <TT CLASS="FILENAME" >/dev/port</TT > ($B%-%c%i%/%?%G(B $B%P%$%9!"%a%8%c!<HV9f(B 1$B!"%^%$%J!<HV9f(B 4)$B$r%*!<%W%s$7$F!"(Bread/write $B$r$*(B $B$3$J$&$H$$$&J}K!$G$9!#(B (stdio $B$N(B <TT CLASS="FUNCTION" >f*()</TT > $B4X?t(B($BLuCm(B: <TT CLASS="FUNCTION" >fwrite()</TT > $B$H$+(B <TT CLASS="FUNCTION" >fread()</TT > $B$H$+(B...)$B$OFb(B $BIt$G%P%C%U%!%j%s%0$r$7$F$$$k$N$G!";H$($^$;$s$M!#(B) $B%*!<%W%s$7$?8e$K!"F~=PNO$7$?$$%]!<%H$N%"%I%l%9$^$G(B <TT CLASS="FUNCTION" >lseek()</TT > $B$7$^$9!#(B (file position 0 $B$,(B $B%]!<%H(B 0x00 $B$K!"(Bfile position 1 $B$,(B $B%]!<%H(B 0x01 ... $B$H$$$C$?6q9g$KAjEv$7$^$9!#(B) $B$=$N8e$K(B <TT CLASS="FUNCTION" >read()</TT >, <TT CLASS="FUNCTION" >write()</TT > $B$r;H$C$F%P%$%H(B/$B%o!<%I$rFI$_=q$-$7$^$9!#(B</P ><P >$B$3$NJ}K!$r;H$&$K$O!"$b$A$m$s(B $B$=$N%W%m%0%i%`$,(B <TT CLASS="FILENAME" >/dev/port</TT > $B$KBP$9$k(B read/write $B5v2D$r;}$C$F$$$J$1$l$P$J$j$^$;$s!#(B $B$3$NJ}K!$O>e$K=R$Y$?DL>o$NJ}K!$h$j$b$*$=$i$/CY$$$G$7$g$&$,!"%3%s%Q%$%k;~$N(B $B:GE,2=$d(B <TT CLASS="FUNCTION" >ioperm()</TT > $B$,ITMW$G$"$k$H$$$&MxE@$,$"$j(B $B$^$9!#(B <TT CLASS="FILENAME" >/dev/port</TT > $B$KBP$7$F%k!<%H0J30$N%f!<%6$d%0%k!<%W$N(B $B%"%/%;%95v2D$rM?$($l$P(B root $BFC8"$bI,MW$"$j$^$;$s!#(B $B$G$b$3$l$O%7%9%F%`%;%-%e%j%F%#$H$$$&0UL#$G$O$H$F$bNI$/$J$$$3$H$G$9!#(B $B$H$$$&$N$O!"(B<TT CLASS="FILENAME" >/dev/port</TT > $B$r;H$C$F%O!<%I%G%#%9%/!"(B $B%M%C%H%o!<%/%+!<%I!"$=$NB>$KD>@\%"%/%;%9$9$k$3$H$G!"%7%9%F%`$K>c32$rM?$($?$j!"(B $B$5$i$K$O(B root $BFC8"$bM?$($F$7$^$&2DG=@-$,$"$k$+$i$G$9!#(B</P ><P ><TT CLASS="FILENAME" >/dev/port</TT > $B$+$i$NFI$_9~$_$K$*$$$F(B <TT CLASS="LITERAL" >select(2)</TT > $B$d(B <TT CLASS="LITERAL" >poll(2)</TT > $B$r;H$&$3$H$O$G$-$^$;$s!#(B $B$J$<$J$iF~NO%]!<%H$NCM$,JQ2=$7$?$H$-$K!"%O!<%I%&%'%"$K$O$=$l$r(BCPU$B$K(B $BEA$($k5!G=$,$J$$$+$i$G$9!#(B</P ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="intro.html" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="irq.html" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Introduction</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >$B3d$j9~$_(B (IRQ) $B$H(B DMA $B%"%/%;%9(B</TD ></TR ></TABLE ></DIV ></BODY ></HTML >