Linux 版 (精华区)

发信人: netiscpu (说不如做), 信区: Unix
标  题: Gcc的安装与使用 (9)
发信站: 紫 丁 香 (Sat May 16 21:01:14 1998), 转信


发信人: jacky (绞肉机), 信区: linux
标  题: Gcc的安装与使用9
发信站: 饮水思源站 (Fri May 15 16:42:23 1998) , 站内信件



行语法分析(parse)的前置作业.常见的有atoi()与atol().

4.3.5. sprintf() 

在大部份的Unix系统上, sprintf(string, fmt, ...)传回的是string的指标,然而,这方
面Linux(遵循ANSI)传回的却是放入string内的字元数目.进行移植时,尤其是针对SunOS,需
有警觉的心.

4.3.6. fcntl 与相关的函数; FD_*家族的定义到底摆在哪里? 

就在 <sys/time.h>里头. 为了真正的原型宣告,当你用了fcntl,可能你也想含括标头档
<unistd.h>进来.

一般而言,函数的manual page会在SYNOPSIS章节内列出需要的标头档.

4.3.7. select() 的计时(time-out)---程式执行时会处於忙碌-等待的状态(busy-waiting). 

很久很久以前, select()的计时参数(time-out parameter)只有读的属性(read-only)而已.即
使到了最近,manual pages仍然有下面这段的警告:

     select()照理讲应该是藉由适当的修正时间的数值,再传回自原始计时(original
     time-out)开始後所剩馀的时间.未来的版本可能会使这项功能实现.因此,就目
     前而言,若假定在呼叫select()之後,计时指标(time-out pointer)仍然不会让人给
     修正过,可是一种非常不明智的想法喔! 

未来就在我们的眼前了!至少,在这儿你绝对可以看到. 函数select()传回的,是扣除等待
尚未到达的资料所耗费的时间後,其剩馀的时间值.如果在计时结束时,都没有资料传送
进来,计时引数(time-out argument)便会设为0;如果接著还有任何的select(),以同样的
time-out structure来呼叫,那麽select()便会立刻结束.

若要修正这项问题,只要每次呼叫select()前,都把计时数值(time-out value)放到time-out
structure内,就没有问题了.把下面的程式码, 

           struct timeval timeout;
           timeout.tv_sec = 1; timeout.tv_usec = 0;
           while (some_condition)
                 select(n,readfds,writefds,exceptfds,&timeout); 

改成, 

           struct timeval timeout;
           while (some_condition) {
                 timeout.tv_sec = 1; timeout.tv_usec = 0;
                 select(n,readfds,writefds,exceptfds,&timeout);
           }

这个问题,在有些版本的Mosaic里是相当著名的,只消一次的等待,Mosaic就挂了.Mosaic的
萤幕右上角,是不是有个圆圆的,会旋转的地球动画.那颗球转得愈快,就表示资料从网路
上传送过来的速率愈慢!

4.3.8. 产生中断的系统呼叫(Interrupted system calls) 

4.3.8.1. 徵兆(Symptom):

--
m;33m※ 来源:·饮水思源站 bbs.sjtu.edu.cn·[FROM: 202.112.26.100]m


--

                              Enjoy Linux!
                          -----It's FREE!-----

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.731毫秒