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

正文內容

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

2025-09-02 21:05本頁面

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

  

【正文】 addr*)amp。peer,amp。name_len)。 if(data_sock0)continue。 printf( 接 受 連 接 來自 %s:%d\n,i_ntoa(),ntohs())。 服務器父進程系統(tǒng)管理 系統(tǒ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(分數 :%d,mark)。 continue。 } 將用戶的學號先輸出,然后讀取用戶的答案與輸入的標準答案對比,相同情況下,mark 變量會自動加上該題分數,輸出之后進入 比較 下一個 用戶答案的 循環(huán),直到 byte6 等于 0時退出循環(huán)。在題量少的情況下,此種操作還可行,但當題量多時,要在大循環(huán)里再設計一個小循環(huán),用來 循環(huán) 讀取某一個用戶的答案,同時還要循環(huán)比較讀出的答案與標準答案 ,直到讀完所有試題時輸出該用戶答案退出小循環(huán),進行下一個用戶的循環(huán)。 評分結果顯示: 當選擇用戶管理選項時,進行用戶添加刪除操作: 選擇第一項,開始刪除用戶: for(。){ byte6=read(userfd,amebuf,9)。 if(byte6==0){ lseek(userfd,0,SEEK_SET)。 printf(沒有用戶數據或者沒有這個用 戶 \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。 } } 因為沒有在文件中直接刪除字節(jié)的函數,所以這里要用到 這個文件,他的作用是保存沒有要求刪除的用戶的學號,起到一個緩存的作用。當用戶輸入要刪除的用戶的學號時,循環(huán)體開始循環(huán)讀 文本中的字節(jié) ,沒有讀到且文本中的數據字節(jié)已經結束,證明沒有這個用戶,返回主菜單; 當一開始在 文本中 讀到 的 9個字節(jié)跟用戶輸入的學號 匹配時,即大循環(huán) for 中的 if 條件語句成功, 用 lseek 函數往后移動 6個字節(jié),作 用 是 跳過此用戶的 口令 , 馬上進入一個內 for 循環(huán),將此 要刪除 用戶的下一個用戶到最后一個用戶的所有數據 (字節(jié) )寫到 文本中,然后刪除 文件,將 文件重命名為 文件,此時的 文件中便沒有了要刪除的用戶的數據,接著在打開 文件,詢問用戶是否要繼續(xù),以判斷下一步要進行的操作;當一開始在 中 讀的 9 個字節(jié)沒能匹配 用戶 輸入的用戶學號時,證明此用戶不是要刪除的用戶,將此用戶學號寫入,再讀 6 個字節(jié) (用戶的 口令 )寫入 ,此時文件中指向字節(jié)的指針已經指向下一個用戶,馬上開始下一個用戶的循環(huán), 直到讀到匹配的用戶或者 文本中的數據已經讀完 ,實現 跳 出循環(huán)。 選擇第二項開始添加用戶: for(。){ byte6=read(userfd,amebuf,9)。 lseek(userfd,6,SEEK_CUR)。 if(strncmp(usernamebuf,amebuf,9)==0){ lseek(userfd,0,SEEK_SET)。 printf(數據庫已有此用戶,請重新輸入 \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é)長度的用戶學號,和用戶輸入的學號比較,當相等時證明 數據文本中已有此用戶,不允許用戶添加此 用戶,指針移到 文本中字節(jié)的開頭,提示重新輸入。當 數據文本中無法讀到匹配的用戶且文本中的數據已讀完前提下,證明用戶輸入的學號是合法的,將此用戶的學號和 口令 加入到 數據文本末尾, 并將指針移到 文本中字節(jié)的開頭, 詢問用戶是否要繼續(xù)進行用戶的添加,判斷下一步要進行的操作。 服務器父進程回收子進程 void schild_exit(int sig) { int schildpid,ssv。 schildpid=wait(amp。ssv)。 printf(父進程正?;厥兆舆M程 %d\n,schildpid)。 //1:no child process } 服務器因子進程退出而被信號中斷返回處
點擊復制文檔內容
黨政相關相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1