📄 在c语言下使用io端.htm
字号:
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'> (libraries). <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'>(Routine)
</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'>(System Call)</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'>(Function)</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'> gcc (</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'> <st1:chsdate IsROCDate="False"
IsLunarDate="False" Day="30" Month="12" Year="1899" w:st="on">2.7.2</st1:chsdate>.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'>) </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'>
egcs (</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
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 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'> (gcc -O1 </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'> #include </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'> #define extern </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'> extern </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'> gcc -g -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'> gcc </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'> (debugger) </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'> 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'>. <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'> 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'> 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'>
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'> (</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'> unistd.h , </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'>
ioperm(from, num, turn_on), </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'>
from </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'>, num </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'>,
ioperm(0x300, 5, 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'> 0x300 </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'> 0x304 (</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'> (true (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'> (false (0)). </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'>. </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(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'> 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'> 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'> 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'> 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'> 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'> ioperm(..., 0) </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:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -