freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計(jì)論文-linux下遠(yuǎn)程考試服務(wù)器端處理系統(tǒng)-資料下載頁(yè)

2025-09-02 21:05本頁(yè)面

【導(dǎo)讀】的操作,多進(jìn)程(并發(fā))管理,實(shí)現(xiàn)了一個(gè)Linux局域網(wǎng)的考試服務(wù)器系統(tǒng)。成功,具體代碼用GNUC語(yǔ)言編程實(shí)現(xiàn)的。系統(tǒng)分為客戶端和服務(wù)器端兩大模塊。服務(wù)系統(tǒng)開發(fā)的整個(gè)過程,包括系統(tǒng)需求分析、總體分析、詳細(xì)設(shè)計(jì)以及部分關(guān)鍵代碼解析。代,不斷修正和改進(jìn),直到形成滿意的實(shí)際可行的系統(tǒng)。

  

【正文】 addr*)amp。peer,amp。name_len)。 if(data_sock0)continue。 printf( 接 受 連 接 來(lái)自 %s:%d\n,i_ntoa(),ntohs())。 服務(wù)器父進(jìn)程系統(tǒng)管理 系統(tǒng)管理界面: 當(dāng)用戶選擇第一項(xiàng)時(shí),將進(jìn)行評(píng)分 ,該模塊 主 要代碼 : for(。){ byte6=read(answerfd,mark_name,10)。 if(byte6==0){ break。 } mark=0。 printf(\n用戶 :)。 for(i=0。ibyte6。i++){ printf(%c,mark_name[i])。 } //read answer from byte6=read(answerfd,sa1buf,3)。 byte6=read(answerfd,sa2buf,3)。 byte6=read(answerfd,sa3buf,3)。 //judge(confirm the score) if(sa1buf[0]==sa1[0] amp。amp。 sa1buf[2]==sa1[2]amp。amp。 sa2buf[0]==sa2[0] amp。amp。 sa2buf[2]!=sa2[2]amp。amp。 sa3buf[0]==sa3[0] amp。amp。 sa3buf[2]!=sa3[2]|| sa1buf[0]==sa1[0] amp。amp。 sa1buf[2]!=sa1[2]amp。amp。 sa2buf[0]==sa2[0] amp。amp。 sa2buf[2]==sa2[2]amp。amp。 sa3buf[0]==sa3[0] amp。amp。 sa3buf[2]!=sa3[2]|| sa1buf[0]==sa1[0] amp。amp。 sa1buf[2]!=sa1[2]amp。amp。 sa2buf[0]==sa2[0] amp。amp。 sa2buf[2]!=sa2[2]amp。amp。 sa3buf[0]==sa3[0] amp。amp。 sa3buf[2]==sa3[2]) { mark=mark+30。 } else if(sa1buf[0]==sa1[0] amp。amp。 sa1buf[2]==sa1[2]amp。amp。 sa2buf[0]==sa2[0] amp。amp。 sa2buf[2]==sa2[2]amp。amp。 sa3buf[0]==sa3[0] amp。amp。 sa3buf[2]!=sa3[2]|| sa1buf[0]==sa1[0] amp。amp。 sa1buf[2]==sa1[2]amp。amp。 sa2buf[0]==sa2[0] amp。amp。 sa2buf[2]!=sa2[2]amp。amp。 sa3buf[0]==sa3[0] amp。amp。 sa3buf[2]==sa3[2]|| sa1buf[0]==sa1[0] amp。amp。 sa1buf[2]!=sa1[2]amp。amp。 sa2buf[0]==sa2[0] amp。amp。 sa2buf[2]==sa2[2]amp。amp。 sa3buf[0]==sa3[0] amp。amp。 sa3buf[2]==sa3[2]) { mark=mark+60。 } else if(sa1buf[0]==sa1[0] amp。amp。 sa1buf[2]==sa1[2]amp。amp。 sa2buf[0]==sa2[0] amp。amp。 sa2buf[2]==sa2[2]amp。amp。 sa3buf[0]==sa3[0] amp。amp。 sa3buf[2]==sa3[2]) { mark=mark+100。 } printf(分?jǐn)?shù) :%d,mark)。 continue。 } 將用戶的學(xué)號(hào)先輸出,然后讀取用戶的答案與輸入的標(biāo)準(zhǔn)答案對(duì)比,相同情況下,mark 變量會(huì)自動(dòng)加上該題分?jǐn)?shù),輸出之后進(jìn)入 比較 下一個(gè) 用戶答案的 循環(huán),直到 byte6 等于 0時(shí)退出循環(huán)。在題量少的情況下,此種操作還可行,但當(dāng)題量多時(shí),要在大循環(huán)里再設(shè)計(jì)一個(gè)小循環(huán),用來(lái) 循環(huán) 讀取某一個(gè)用戶的答案,同時(shí)還要循環(huán)比較讀出的答案與標(biāo)準(zhǔn)答案 ,直到讀完所有試題時(shí)輸出該用戶答案退出小循環(huán),進(jìn)行下一個(gè)用戶的循環(huán)。 評(píng)分結(jié)果顯示: 當(dāng)選擇用戶管理選項(xiàng)時(shí),進(jìn)行用戶添加刪除操作: 選擇第一項(xiàng),開始刪除用戶: for(。){ byte6=read(userfd,amebuf,9)。 if(byte6==0){ lseek(userfd,0,SEEK_SET)。 printf(沒有用戶數(shù)據(jù)或者沒有這個(gè)用 戶 \n)。 break。 } //when equal, write behind data if(strncmp(amebuf,usernamebuf,9)==0){ //cycle write behind data to lseek(userfd, 6, SEEK_CUR)。 //set next read position(ignore the secret) for(。){ byte7=read(userfd,sharebuf,15)。 if(byte7==0){ break。 } lseek(tempfd,0,SEEK_END)。 write(tempfd,sharebuf,15)。 } printf(操作成功 \n)。 close(userfd)。 close(tempfd)。 unlink(C:\\cygwin\\home\\bochi\\)。 rename(C:\\cygwin\\home\\bochi\\,\ C:\\cygwin\\home\\bochi\\)。 userfd=open(C:\\cygwin\\home\\bochi\\,O_RDWR,0666)。 printf(想要繼續(xù)刪除用戶? (yes/no):)。 scanf(%s,yn)。 if(yn[0]==39。y39。||yn[0]==39。y39。amp。amp。yn[1]==39。e39。amp。amp。yn[2]==39。s39。){ tempfd=open(C:\\cygwin\\home\\bochi\\,\ O_RDWR|O_CREAT,0666)。 goto cloop。 } else break。 } //when unequal, write foregoing data else{ write(tempfd ,amebuf,9)。 read(userfd,sharebuf,6)。 write(tempfd,sharebuf,6)。 continue。 } } 因?yàn)闆]有在文件中直接刪除字節(jié)的函數(shù),所以這里要用到 這個(gè)文件,他的作用是保存沒有要求刪除的用戶的學(xué)號(hào),起到一個(gè)緩存的作用。當(dāng)用戶輸入要?jiǎng)h除的用戶的學(xué)號(hào)時(shí),循環(huán)體開始循環(huán)讀 文本中的字節(jié) ,沒有讀到且文本中的數(shù)據(jù)字節(jié)已經(jīng)結(jié)束,證明沒有這個(gè)用戶,返回主菜單; 當(dāng)一開始在 文本中 讀到 的 9個(gè)字節(jié)跟用戶輸入的學(xué)號(hào) 匹配時(shí),即大循環(huán) for 中的 if 條件語(yǔ)句成功, 用 lseek 函數(shù)往后移動(dòng) 6個(gè)字節(jié),作 用 是 跳過此用戶的 口令 , 馬上進(jìn)入一個(gè)內(nèi) for 循環(huán),將此 要?jiǎng)h除 用戶的下一個(gè)用戶到最后一個(gè)用戶的所有數(shù)據(jù) (字節(jié) )寫到 文本中,然后刪除 文件,將 文件重命名為 文件,此時(shí)的 文件中便沒有了要?jiǎng)h除的用戶的數(shù)據(jù),接著在打開 文件,詢問用戶是否要繼續(xù),以判斷下一步要進(jìn)行的操作;當(dāng)一開始在 中 讀的 9 個(gè)字節(jié)沒能匹配 用戶 輸入的用戶學(xué)號(hào)時(shí),證明此用戶不是要?jiǎng)h除的用戶,將此用戶學(xué)號(hào)寫入,再讀 6 個(gè)字節(jié) (用戶的 口令 )寫入 ,此時(shí)文件中指向字節(jié)的指針已經(jīng)指向下一個(gè)用戶,馬上開始下一個(gè)用戶的循環(huán), 直到讀到匹配的用戶或者 文本中的數(shù)據(jù)已經(jīng)讀完 ,實(shí)現(xiàn) 跳 出循環(huán)。 選擇第二項(xiàng)開始添加用戶: for(。){ byte6=read(userfd,amebuf,9)。 lseek(userfd,6,SEEK_CUR)。 if(strncmp(usernamebuf,amebuf,9)==0){ lseek(userfd,0,SEEK_SET)。 printf(數(shù)據(jù)庫(kù)已有此用戶,請(qǐng)重新輸入 \n)。 goto ccloop。 } else if(strncmp(usernamebuf,amebuf,9)!=0amp。amp。byte6==0){ lseek(userfd,0,SEEK_END)。//set the position to write write(userfd,usernamebuf,9)。 write(userfd,passwordbuf,6)。 lseek(userfd,0,SEEK_SET)。 printf(操作成功 \n)。 printf(想要繼續(xù)添加用戶? (yes/no):)。 scanf(%s,yn)。 if(yn[0]==39。y39。||yn[0]==39。y39。amp。amp。yn[1]==39。e39。amp。amp。yn[2]==39。s39。){ goto ccloop。 } else{ close(userfd)。 goto loop。 //return to the main menu } } } 循環(huán)在 文本中讀取 9 字節(jié)長(zhǎng)度的用戶學(xué)號(hào),和用戶輸入的學(xué)號(hào)比較,當(dāng)相等時(shí)證明 數(shù)據(jù)文本中已有此用戶,不允許用戶添加此 用戶,指針移到 文本中字節(jié)的開頭,提示重新輸入。當(dāng) 數(shù)據(jù)文本中無(wú)法讀到匹配的用戶且文本中的數(shù)據(jù)已讀完前提下,證明用戶輸入的學(xué)號(hào)是合法的,將此用戶的學(xué)號(hào)和 口令 加入到 數(shù)據(jù)文本末尾, 并將指針移到 文本中字節(jié)的開頭, 詢問用戶是否要繼續(xù)進(jìn)行用戶的添加,判斷下一步要進(jìn)行的操作。 服務(wù)器父進(jìn)程回收子進(jìn)程 void schild_exit(int sig) { int schildpid,ssv。 schildpid=wait(amp。ssv)。 printf(父進(jìn)程正?;厥兆舆M(jìn)程 %d\n,schildpid)。 //1:no child process } 服務(wù)器因子進(jìn)程退出而被信號(hào)中斷返回處
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1