📄 00000002.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER> <BR>在 UNIX 系统发展应用程式入门 (二) 王志祥 <BR> <BR> <BR> <BR> <BR>取得 User 资料的 pitch 函数: <BR> 上其的 FindMan 的 Initial 部份提到两个 User Define 的函数, <BR>一个是 catch, 另一个即是 pitch. Initial 部份 fork 的二十个程序都呼叫 <BR> pitch 函数向二十台工作站收集 User login 的资料并筛选出使用者所需的 <BR>资料, 先整理出来的程序便先向主程序要求传送资料, 传送以 Socket 完成. <BR>有关 Socket 的部份以後再谈. 以下是 pitch 函数的部份程式: <BR> <BR>pitch(host) <BR> char *host; <BR>{ <BR> int bufsize; <BR> int ps, j, k, l; <BR> char buffer[BUFSIZE]; <BR> int count; <BR> struct utmpidlearr up; <BR> int tmp, gcount, gidx[25]; <BR> char gname[25][80]; <BR> char line[25][9]; <BR> char name[25][9]; <BR> char hhost[25][17]; <BR> long time[25]; <BR> unsigned idle[25]; <BR> char temp[80]; <BR> <BR> up.uia_arr=(struct utmpidle **) malloc(25*sizeof(struct utmpidle *)); <BR> <BR> : : : <BR> : : : <BR> /* 此处省略要求 Connect 的 Socket 之 Initial 部份. */ <BR> : : : <BR> : : : <BR> <BR> <BR> strcpy(buffer,host); <BR> k=strlen(host); <BR> strcpy(&buffer[k],":\n"); <BR> k+=2; <BR> if ( rusers(host, &up) == 0 ) { <BR> count = up.uia_cnt; <BR> buffer[k++] = (char) count; <BR> for ( j=0; j<count; j++) { <BR> strncpy(line[j],up.uia_arr[j]->ui_utmp.ut_line,8); <BR> line[j][8]='\0'; <BR> strncpy(name[j],up.uia_arr[j]->ui_utmp.ut_name,8); <BR> name[j][8]='\0'; <BR> strncpy(hhost[j],up.uia_arr[j]->ui_utmp.ut_host,16); <BR> hhost[j][16]='\0'; <BR> time[j]=up.uia_arr[j]->ui_utmp.ut_time; <BR> idle[j]=up.uia_arr[j]->ui_idle; <BR> } <BR> if (count != 0) { <BR> gcount=check(count,name,gname,gidx); <BR> buffer[k++] = (char) gcount; <BR> if (gcount !=0) <BR> for (j=0; j<gcount;) { <BR> strcpy(&buffer[k],gname[j]); <BR> k+=strlen(gname[j]); <BR> do { <BR> tmp=gidx[j++]; <BR> if ( j > gcount ) <BR> break; <BR> <BR> buffer[k++]='\t'; <BR> strcpy(&buffer[k],line[tmp]); <BR> k+=strlen(line[tmp]); <BR> <BR> buffer[k++]='\t'; <BR> if ((l=idle[tmp]/60) != 0) <BR> sprintf(temp,"%d:%d\t",l,(idle[tmp]%60)); <BR> else <BR> sprintf(temp,"%d\t",(idle[tmp]%60)); <BR> strcpy(&buffer[k],temp); <BR> k+=strlen(temp); <BR> <BR> <BR> strcpy(temp,asctime(localtime(&time[tmp]))); <BR> strcpy(&buffer[k],temp); <BR> k+=(strlen(temp) - 6); <BR> <BR> buffer[k++]='\t'; <BR> strcpy(&buffer[k],hhost[tmp]); <BR> k+=strlen(hhost[tmp]); <BR> <BR> buffer[k++]='\n'; <BR> } while (strcmp(name[tmp],"repeat") == 0); <BR> } <BR> } <BR> buffer[k++]='\0'; <BR> } <BR> else { <BR> count = -1; <BR> buffer[k++] = (char) count; <BR> } <BR> <BR> : : : <BR> : : : <BR> /* 此处省略要求 Connect 的 Socket 之传送资料部份. */ <BR> : : : <BR> : : : <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -