⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000005.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 4 页
字号:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F_SETFL&nbsp;设定&nbsp;O_NDELAY。比较旧的系统(Version&nbsp;7,&nbsp;4.1&nbsp;BSD)&nbsp;没有&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;O_NDELAY,那就得用&nbsp;alarm(2)&nbsp;来设定&nbsp;read&nbsp;的&nbsp;timeout,以达成近似&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nonblocking&nbsp;read&nbsp;的功能。&nbsp;<BR>&nbsp;<BR>------------------------------&nbsp;<BR>&nbsp;<BR>Subject:&nbsp;How&nbsp;do&nbsp;I&nbsp;find&nbsp;the&nbsp;name&nbsp;of&nbsp;an&nbsp;open&nbsp;file?&nbsp;<BR>Date:&nbsp;Thu&nbsp;Mar&nbsp;18&nbsp;17:16:55&nbsp;EST&nbsp;1993&nbsp;<BR>&nbsp;<BR>4.3)&nbsp;&nbsp;要怎样才能得知一个已&nbsp;open&nbsp;档案之档名?&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个是非常困难的。若是这个&nbsp;file&nbsp;descriptor&nbsp;是对应到&nbsp;pipe&nbsp;或&nbsp;pty&nbsp;就没&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有名字了。这个&nbsp;file&nbsp;descriptor&nbsp;对应的档案也有可能已被删除。若是有&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;symbolic&nbsp;link&nbsp;或&nbsp;hard&nbsp;link,则可能有许多个名字。&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你经过一再考虑後别无选择一定要这麽做的话,可以用&nbsp;find&nbsp;的&nbsp;-inum&nbsp;与&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-xdev&nbsp;选项,或用&nbsp;ncheck,或用自己写类似的程式来做。在这麽做时要耐心的&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;等,因为在一个几百&nbsp;megabyte&nbsp;甚至几&nbsp;gigabyte&nbsp;的&nbsp;file&nbsp;system中找一个档&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;案,一定得花不少时间。&nbsp;<BR>&nbsp;<BR>------------------------------&nbsp;<BR>&nbsp;<BR>Subject:&nbsp;How&nbsp;can&nbsp;an&nbsp;executing&nbsp;program&nbsp;determine&nbsp;its&nbsp;own&nbsp;pathname?&nbsp;<BR>Date:&nbsp;Thu&nbsp;Mar&nbsp;18&nbsp;17:16:55&nbsp;EST&nbsp;1993&nbsp;<BR>&nbsp;<BR>4.4)&nbsp;&nbsp;一个执行中的程式如何知道自己的&nbsp;pathname?&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;若果&nbsp;argv[0]&nbsp;是以&nbsp;&quot;/&quot;&nbsp;开始的字,它可能就是你的程式所在地的绝对路径。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果不是那就得照顺序检查&nbsp;PATH&nbsp;里的每一个目录看看里面是否有与&nbsp;argv[0]&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一样的程式。如果找得到的话将那个目录与程式名称兜起来可能就是你要的&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pathname&nbsp;了。&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不过上述方法找到的并不一定是正确的,因为在程式中用到&nbsp;exec()&nbsp;时,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argv[0]&nbsp;是可以随便给的。将&nbsp;argv[0]&nbsp;设为与要执行的程式名称相同只是一&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;种惯用法罢了!&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以下的例子可能会使你更清楚些:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;stdio.h&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main()&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;execl(&quot;/usr/games/rogue&quot;,&nbsp;&quot;vi&nbsp;Thesis&quot;,&nbsp;(char&nbsp;*)NULL);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个被执行的程式就会认为它的名字(argv[0]&nbsp;之值)是&nbsp;&quot;vi&nbsp;Thesis&quot;)。&nbsp;<BR>&nbsp;<BR>------------------------------&nbsp;<BR>&nbsp;<BR>Subject:&nbsp;How&nbsp;do&nbsp;I&nbsp;use&nbsp;popen()&nbsp;to&nbsp;open&nbsp;a&nbsp;process&nbsp;for&nbsp;reading&nbsp;AND&nbsp;writing?&nbsp;<BR>Date:&nbsp;Thu&nbsp;Mar&nbsp;18&nbsp;17:16:55&nbsp;EST&nbsp;1993&nbsp;<BR>&nbsp;<BR>4.5)&nbsp;&nbsp;如何用&nbsp;popen()&nbsp;对一个&nbsp;process&nbsp;做读写的动作?&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用&nbsp;pipe&nbsp;把一个&nbsp;process&nbsp;的输出、输入转给任意的&nbsp;process&nbsp;所可能会发生的&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;问题就是&nbsp;deadlock,譬如这两个&nbsp;processes&nbsp;刚好同时都在等待「尚未产生」&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;的输入时。唯一能避免&nbsp;deadlock&nbsp;的方法就是在&nbsp;pipe&nbsp;的两端都要遵循严格的&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deadlock-free&nbsp;协定,但是需要这些&nbsp;processes&nbsp;之间的互相合作才能达成,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而对於像&nbsp;popen()&nbsp;这类的函数来说并不太适合。&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在&nbsp;'expect'&nbsp;这个软体中附有一个能够让&nbsp;C&nbsp;程式直接引用的函式库。其中有&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个函式不管是在读或写都能达到和&nbsp;popen&nbsp;相同的功能。但是这个函式是使&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用&nbsp;ptys&nbsp;而不是&nbsp;pipes,也没有&nbsp;deadlock&nbsp;的问题,并且在&nbsp;BSD&nbsp;或&nbsp;SV&nbsp;中都&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;能使用。若想对&nbsp;'expect'&nbsp;有进一步的了解,可参考下一个问题的解答。&nbsp;<BR>&nbsp;<BR>------------------------------&nbsp;<BR>&nbsp;<BR>Subject:&nbsp;How&nbsp;do&nbsp;I&nbsp;sleep()&nbsp;in&nbsp;a&nbsp;C&nbsp;program&nbsp;for&nbsp;less&nbsp;than&nbsp;one&nbsp;second?&nbsp;<BR>Date:&nbsp;Thu&nbsp;Mar&nbsp;18&nbsp;17:16:55&nbsp;EST&nbsp;1993&nbsp;<BR>&nbsp;<BR>4.6)&nbsp;&nbsp;在&nbsp;C&nbsp;程式中要怎麽用&nbsp;sleep()&nbsp;才能够&nbsp;sleep&nbsp;小於一秒?&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先要注意的是,你只能指定&nbsp;delay&nbsp;的「最短」时间;实际上会&nbsp;delay&nbsp;多久和&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;系统的&nbsp;scheduling&nbsp;方式有关,例如系统当时的负载。如果你倒楣的话,它还可&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;能会&nbsp;delay&nbsp;蛮长的时间。&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;并没有一个标准函式能够在「小睡」(很短的&nbsp;sleep)期间提供你计数的功能。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;某些系统有提供&nbsp;usleep(n)&nbsp;的函式,它能够暂停执行&nbsp;n&nbsp;微秒(microsecond)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;的时间。如果你所使用的系统没有提供&nbsp;usleep()&nbsp;函式,那麽以下有可在&nbsp;BSD,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System&nbsp;V&nbsp;使用中的作法。&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接下来的这段程式码是&nbsp;Doug&nbsp;Gwyn&nbsp;在&nbsp;System&nbsp;V&nbsp;中模拟&nbsp;4BSD&nbsp;并利用&nbsp;4BSD&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;中的&nbsp;select()&nbsp;系统呼叫。Doung&nbsp;自己都叫它为&nbsp;'nap()'&nbsp;;你也可以把它叫做&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;usleep()&quot;;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usleep&nbsp;--&nbsp;support&nbsp;routine&nbsp;for&nbsp;4.2BSD&nbsp;system&nbsp;call&nbsp;emulations&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last&nbsp;edit:&nbsp;&nbsp;29-Oct-1984&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D&nbsp;A&nbsp;Gwyn&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select();&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usleep(&nbsp;usec&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;returns&nbsp;0&nbsp;if&nbsp;ok,&nbsp;else&nbsp;-1&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usec;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;delay&nbsp;in&nbsp;microseconds&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;struct&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;`timeval'&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tv_sec;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;seconds&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tv_usec;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;microsecs&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;delay;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;_select()&nbsp;timeout&nbsp;*/&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay.tv_sec&nbsp;=&nbsp;usec&nbsp;/&nbsp;1000000L;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay.tv_usec&nbsp;=&nbsp;usec&nbsp;%&nbsp;1000000L;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;select(&nbsp;0,&nbsp;(long&nbsp;*)0,&nbsp;(long&nbsp;*)0,&nbsp;(long&nbsp;*)0,&nbsp;&amp;delay&nbsp;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;System&nbsp;V&nbsp;you&nbsp;might&nbsp;do&nbsp;it&nbsp;this&nbsp;way:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subseconds&nbsp;sleeps&nbsp;for&nbsp;System&nbsp;V&nbsp;-&nbsp;or&nbsp;anything&nbsp;that&nbsp;has&nbsp;poll()&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Don&nbsp;Libes,&nbsp;4/1/1991&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;BSD&nbsp;analog&nbsp;to&nbsp;this&nbsp;function&nbsp;is&nbsp;defined&nbsp;in&nbsp;terms&nbsp;of&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;microseconds&nbsp;while&nbsp;poll()&nbsp;is&nbsp;defined&nbsp;in&nbsp;terms&nbsp;of&nbsp;milliseconds.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;compatibility,&nbsp;this&nbsp;function&nbsp;provides&nbsp;accuracy&nbsp;&quot;over&nbsp;the&nbsp;long&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;run&quot;&nbsp;by&nbsp;truncating&nbsp;actual&nbsp;requests&nbsp;to&nbsp;milliseconds&nbsp;and&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;accumulating&nbsp;microseconds&nbsp;across&nbsp;calls&nbsp;with&nbsp;the&nbsp;idea&nbsp;that&nbsp;you&nbsp;are&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;probably&nbsp;calling&nbsp;it&nbsp;in&nbsp;a&nbsp;tight&nbsp;loop,&nbsp;and&nbsp;that&nbsp;over&nbsp;the&nbsp;long&nbsp;run,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;error&nbsp;will&nbsp;even&nbsp;out.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;you&nbsp;aren't&nbsp;calling&nbsp;it&nbsp;in&nbsp;a&nbsp;tight&nbsp;loop,&nbsp;then&nbsp;you&nbsp;almost&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;certainly&nbsp;aren't&nbsp;making&nbsp;microsecond-resolution&nbsp;requests&nbsp;anyway,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;which&nbsp;case&nbsp;you&nbsp;don't&nbsp;care&nbsp;about&nbsp;microseconds.&nbsp;&nbsp;And&nbsp;if&nbsp;you&nbsp;did,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;you&nbsp;wouldn't&nbsp;be&nbsp;using&nbsp;UNIX&nbsp;anyway&nbsp;because&nbsp;random&nbsp;system&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indigestion&nbsp;(i.e.,&nbsp;scheduling)&nbsp;can&nbsp;make&nbsp;mincemeat&nbsp;out&nbsp;of&nbsp;any&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timing&nbsp;code.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns&nbsp;0&nbsp;if&nbsp;successful&nbsp;timeout,&nbsp;-1&nbsp;if&nbsp;unsuccessful.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;poll.h&gt;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usleep(usec)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;usec;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;microseconds&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;subtotal&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;microseconds&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;msec;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;milliseconds&nbsp;*/&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;'foo'&nbsp;is&nbsp;only&nbsp;here&nbsp;because&nbsp;some&nbsp;versions&nbsp;of&nbsp;5.3&nbsp;have&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;a&nbsp;bug&nbsp;where&nbsp;the&nbsp;first&nbsp;argument&nbsp;to&nbsp;poll()&nbsp;is&nbsp;checked&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;for&nbsp;a&nbsp;valid&nbsp;memory&nbsp;address&nbsp;even&nbsp;if&nbsp;the&nbsp;second&nbsp;argument&nbsp;is&nbsp;0.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;pollfd&nbsp;foo;&nbsp;<BR>&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -