📄 00000002.htm
字号:
<BR>} <BR> <BR> 其中 rusers 的部份可在 CCSUN 用 " man 3 rusers " 查, 兹摘录 <BR>如下: <BR> <BR>==================> man 3 rusers 的摘录 <============== <BR>NAME <BR> rnusers, rusers - return information about users on remote <BR> machines <BR> <BR>DESCRIPTION <BR> rnusers() returns the number of users logged on to host (-1 <BR> if it cannot determine that number). rusers() fills the <BR> utmpidlearr structure with data about host, and returns 0 if <BR> successful. <BR> <BR>PROGRAMMING <BR> #include <rpcsvc/rusers.h> <=== 查 struct 的地方 <BR> rnusers(host) <BR> char *host <BR> rusers(host, up) <BR> char *host <BR> struct utmpidlearr *up; <BR>========================================================== <BR> <BR> 由於以上的 manual 中并没有指出 utmpidlearr 的结构型态如何, <BR>因此我们必须列出我们所需要的 head file 资料以取得我们要的 <BR>utmpidlearr 结构. 以下是我的搜寻所得: <BR> <BR>==================> utmpidlearr 重要资料 <================= <BR>struct utmpidle { <BR> struct utmp ui_utmp; <BR> unsigned ui_idle; <BR>}; <BR> <BR>struct utmpidlearr { <BR> struct utmpidle **uia_arr; <BR> int uia_cnt; <BR>}; <BR> <BR>struct utmp { <BR> char ut_line[8]; /* tty name */ <BR> char ut_name[8]; /* user id */ <BR> char ut_host[16]; /* host name, if remote */ <BR> long ut_time; /* time on */ <BR>}; <BR>============================================================ <BR> <BR> 有了这些资料以後, 再看前面的程式就比较易懂了. ( 若因程式的 <BR>变数命名太差, 或流程太混乱, 请见谅. 因这一部份在完成之初又不断加新 <BR>的功能, 而不是一次完成的. ) <BR> <BR> 程式中的 buffer 这个变数储存欲送出的资料, 其格式为: <BR>================================================================== <BR>工作站名 login 人数 符合资料的人数 帐号及其上机状态 <BR>any bytes 1 bytes 1 bytes any bytes <BR>================================================================== <BR> <BR> 以下面 FindMan 的输出为例说明: <BR>=====================> FindMan 部份输出 <===================== <BR>ccsun7: <BR>u813xx07 -----> xxxxxxxxxxx <BR> ttyq0 0 Tue Apr 27 23:56:53 xxxuling.Dorm10. <BR> ttyp1 0 Wed Apr 28 01:46:29 xxxuling.Dorm10. <BR> <BR>u802xx23 Chen2 xxxxxxxx <BR> ttyr6 31:47 Mon Apr 26 18:47:17 140.113.1xx.177: <BR> <BR>ccsun16: <BR>u813xx16 -----> xxxxxxxxxxx <BR> ttyp1 0 Wed Apr 28 01:46:29 xxxmy.DormChu.NC <BR>============================================================== <BR> <BR> 其中工作站名不限 byte 数, 接收端以 ":\n" 判断此部份的资料 <BR>结束与否. 当第二部份为 0 时即填入 -1 表示无人, 与资料比对後找不到 <BR>人亦如此. check 函数即是处理与资料比对的工作, FindMan 是与 .look <BR>比对, ScanGirl 与 girl 的资料档比对. check 的函数传回 gcount、 <BR>gname、gidx 三个变数. gcount 即是 match 的人数, gname 是从 rusers <BR>传回的资料档稍作修改 ( 重复的帐号改成 "repeat" ) 而成. 而 gidx 是 <BR>rusers 传回资料的排序後的 index. <BR> 从 check 函数传回的 gname、gidx 构成 buffer 阵列最後的资料. <BR>即 "帐号及其上机状态" 部份. 全部完成後即将资料送出. 由於 check 函数 <BR>并不难写, 故不列出. <BR> <BR> 由於篇幅及时间所限, 这次只讲 pitch 函数, 其它以後再继续, <BR>下期见!! 8-) <BR> <BR>————————————————————————————————— <BR>FindMan 关闭启示: <BR> 近来 CCSUN 的使用率大幅增加 , 使得 CCSUN <BR>的 Load 高居不下, 我的 FindMan 公用程式只有在 Load 很轻的 <BR>SUN 上测试过 ( 0 到 2 ), 没想到最近 Load 重的 SUN ( 7 以上 ) <BR>上执行时, 我程式中加快搜寻速度的部份竟成为致命伤. 由於一 <BR>次开二十个程序, 若不幸因电脑异常, 则大部分程序会停住而无法离开, <BR>使电脑 Load 更形加重, 也令系统管理者困扰. 在我花了十数小时不断 <BR>改程式後( 包括加上 Alarm Signal 控制执行时间 ), 终於还是不能克服 <BR>Load 重时的异常状况. 看来, 我的程式理念 ( 以多个程序平行处理来增 <BR>快速度 ) 只能在人数少的工作站或特殊的电脑才能用. 有志於发展应用程 <BR>式的同学, 切记这个教训. <BR> <BR> 由於旧的 FindMan 程式有时会出状况, 我已经将它去掉, <BR>以後有空时再写新的单一程序之 FindMan. 虽然程式已撤掉, 但本文可当 <BR>成纯为讨论程式设计, 故仍继续下去. <BR>————————————————————————————————— <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -