📄 在c语言下使用io端.htm
字号:
10.5pt'> I/O </span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>埠的存取权限</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'>; </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>因为当你的程式执行完毕之后这个动作会自动完成</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'>. <br>
<br>
</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>呼叫函式</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> setuid() </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>将目前执行程式的有效使用者识别码</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> (ID) </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>设定成非</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'> root </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>的使用者并不影响其先前以</span><span lang=EN-US style='mso-bidi-font-size:
10.5pt'> ioperm() </span><span style='mso-bidi-font-size:10.5pt;font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>的方式所取得的</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> I/O </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>埠存取权限</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'>, </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>但是呼叫函式</span><span lang=EN-US style='mso-bidi-font-size:
10.5pt'> fork() </span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>的方式却会有所影响</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> (</span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>虽然父行程</span><span lang=EN-US style='mso-bidi-font-size:10.5pt'>
(parent process) </span><span style='mso-bidi-font-size:10.5pt;font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>保有存取权限</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'>, </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>但是子行程</span><span lang=EN-US style='mso-bidi-font-size:10.5pt'>
(child process) </span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>却无法取得存取权限</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'>). <br>
<br>
</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>函式</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> ioperm() </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>只能让你取得埠位址</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'> 0x000 </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>到</span><span lang=EN-US style='mso-bidi-font-size:10.5pt'>
0x3ff </span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>的存取权限</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'>; </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>至于较高位址的埠</span><span lang=EN-US style='mso-bidi-font-size:
10.5pt'>, </span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>你得使用函式</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> iopl() (</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>该函式让你一次可以存取所有的埠位址</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'>). </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>将权限等级参数值设为</span><span lang=EN-US style='mso-bidi-font-size:
10.5pt'> 3 (</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>例如</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'>, iopl(3)) </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>以便你的程式能够存取</span><span
style='mso-bidi-font-size:10.5pt'> </span><span style='mso-bidi-font-size:10.5pt;
font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>所有的</span><span lang=EN-US style='mso-bidi-font-size:10.5pt'>
I/O </span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>埠</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> (</span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>因此要小心</span><span lang=EN-US style='mso-bidi-font-size:10.5pt'>
--- </span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>如果存取到错误的埠位址将对你的电脑造成各种不可预期的损害</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'>. </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>同样地</span><span lang=EN-US style='mso-bidi-font-size:10.5pt'>,
</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>呼叫函式</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> iopl() </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>你得拥有</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'> root </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>的权限</span><span lang=EN-US style='mso-bidi-font-size:10.5pt'>.</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>至于语法的细节请参考</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'> iopl(2) </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>的使用说明文件</span><span lang=EN-US style='mso-bidi-font-size:
10.5pt'>. <br>
<br>
</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>接着</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'>, </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>我们来实际地存取</span><span lang=EN-US style='mso-bidi-font-size:
10.5pt'> I/O </span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>埠</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'>... </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>要从某个埠位址输入一个</span><span lang=EN-US style='mso-bidi-font-size:
10.5pt'> byte (8 </span><span style='mso-bidi-font-size:10.5pt;font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>个</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> bits) </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>的资料</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'>, </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>你得呼叫函式</span><span lang=EN-US style='mso-bidi-font-size:
10.5pt'> inb(port) , </span><span style='mso-bidi-font-size:10.5pt;font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>该函式会传回所取得的一个</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> byte </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>的资料</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'>. </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>要输出一个</span><span lang=EN-US style='mso-bidi-font-size:10.5pt'>
byte </span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>的资料</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'>, </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>你得呼叫函式</span><span lang=EN-US style='mso-bidi-font-size:
10.5pt'> outb(value, port) (</span><span style='mso-bidi-font-size:10.5pt;
font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>请记住参数的次序</span><span lang=EN-US style='mso-bidi-font-size:
10.5pt'>). </span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>要从某二个埠位址</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> x </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>和</span><span lang=EN-US style='mso-bidi-font-size:10.5pt'>
x 1 (</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>二个</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> byte </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>组成一个</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'> word, </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>故使用组合语言指令</span><span lang=EN-US style='mso-bidi-font-size:
10.5pt'> inw) </span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>输入一个</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> word (16 </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>个</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'> bits) </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>的资料</span><span lang=EN-US style='mso-bidi-font-size:10.5pt'>,
</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>你得呼叫函式</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> inw(x) ; </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>要输出一个</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'> word </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>的资料到二个埠位址</span><span lang=EN-US style='mso-bidi-font-size:
10.5pt'>, </span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>你得呼叫函式</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> outw(value, x) . </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>如果你不确定使用那个埠指令</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'> (byte </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>或</span><span lang=EN-US style='mso-bidi-font-size:10.5pt'>
word), </span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>你大概须要</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> inb() </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>与</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'> outb() </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>这二个埠指令</span><span lang=EN-US style='mso-bidi-font-size:
10.5pt'> --- </span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>因为大多数的装置都是采用</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> byte </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>大小的埠存取方式来设计的</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'>. </span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>注意所有的埠存取指令都至少需要大约一微秒的时间来执行</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt'>. <br>
<br>
</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>如果你使用的是</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt'> inb_p(), outb_p(), inw_p(), </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>以及</span><span lang=EN-US
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -