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

正文內(nèi)容

基于linux網(wǎng)絡(luò)聊天室-畢業(yè)設(shè)計(jì)論文(編輯修改稿)

2024-12-29 16:06 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 上每個(gè)給出的文件上執(zhí)行 [9]。 GCC 選項(xiàng) GCC 有超過 100 個(gè)的編譯選項(xiàng)可用。 這些選 項(xiàng)中的許多 可能永遠(yuǎn)都不會(huì)用到 , 但一些主要的選項(xiàng)將會(huì)頻繁用到。 很多的 GCC 選項(xiàng)包括一 個(gè)以上的字符。 因此 必須為內(nèi)蒙古科技大學(xué)畢業(yè)設(shè)計(jì) 說明書 (畢業(yè) 論文 ) 6 每個(gè)選項(xiàng)指定各自的連字符 , 并且就象大多數(shù) Linux 命令一樣 不能在一個(gè)單獨(dú)的連字符后跟一組選項(xiàng)。例如 , 下面的兩個(gè)命令是不同的: gcc p g gcc pg 第一條命令告訴 GCC 編譯 時(shí)為 prof 命令建立剖析 (profile)信息并且把調(diào)試信息加入到可執(zhí)行的文件里。 第二條命令只告訴 GCC 為 gprof 命令建立剖析信息。 當(dāng) 不用任何選項(xiàng)編譯一個(gè)程序時(shí) , GCC 將會(huì)建立 (假定編譯成功 )一個(gè)名為 的 可執(zhí)行文件。 例如 , 下面的命令將在當(dāng)前目錄下產(chǎn)生一個(gè)叫 的文件: gcc 用 o 編譯選項(xiàng)來為將產(chǎn)生的可執(zhí)行文件指定一個(gè)文件名來代替 。例如 , 將一個(gè)叫 的 C 程序編譯為名叫 count 的可執(zhí)行文件 , 將輸入下面的命令: gcc o count 注意:當(dāng)使用 o 選項(xiàng)時(shí) , o 后面必須跟一個(gè)文件名。 GCC 同樣有指定編譯器處理多少的編譯選項(xiàng)。 c 選項(xiàng)告訴 GCC 僅把源代碼編譯為目標(biāo)代碼而跳過匯編和連接的步驟。這個(gè) 選項(xiàng)使用的非常頻繁因?yàn)樗沟镁幾g多個(gè) C 程序時(shí)速度更快并且更易于管理。缺省時(shí) GCC 建立的目標(biāo)代碼文件有一個(gè) .o 的擴(kuò)展名 。 S 編譯選項(xiàng)告訴 GCC 在為 C 代碼產(chǎn)生了匯編語(yǔ)言文件后停止編譯。 GCC 產(chǎn)生的匯編語(yǔ)言文件的缺省擴(kuò)展名是 .s 。 E 選項(xiàng)指示編譯器僅對(duì)輸入文件進(jìn)行預(yù)處理。 當(dāng)這個(gè)選項(xiàng)被使用時(shí) , 預(yù)處理器的輸出被送到標(biāo)準(zhǔn)輸出而不是儲(chǔ)存在文件里。 /BR優(yōu)化選項(xiàng) : 當(dāng) 用 GCC 編譯 C 代碼時(shí) , 它會(huì)試著用最少的時(shí)間完成編譯并且使編譯后的代碼易于調(diào)試。易于調(diào)試意味著編譯后的代碼 與源代碼有同樣的執(zhí)行次序 , 編譯后的代碼沒有經(jīng)過優(yōu)化。有很多選項(xiàng)可用于告訴 GCC 在耗費(fèi)更多編譯時(shí)間和犧牲易調(diào)試性的基礎(chǔ)上產(chǎn)生更小更快的可執(zhí)行文件。這些選項(xiàng)中最典型的是 O 和 O2 選項(xiàng)。 O 選項(xiàng)告訴 GCC 對(duì)源代碼進(jìn)行基本優(yōu)化 , 這些優(yōu)化在大多數(shù)情況下都會(huì)使程序執(zhí)行的更快 ; O2 選項(xiàng)告訴 GCC 產(chǎn)生盡可能小和盡可能快的代碼 , O2 選項(xiàng)將使編譯的速度比使用 O 時(shí)慢 , 但通常產(chǎn)生的代碼執(zhí)行速度會(huì)更快。除了 O 和 O2 優(yōu)化選項(xiàng)外 , 還有一些低級(jí)選項(xiàng)用于產(chǎn)生更快的代碼。 這些選項(xiàng)非常的特殊 , 而且最好只有當(dāng) 完全理解這些選項(xiàng)將會(huì)對(duì)編譯后的代碼產(chǎn)生什么樣的效果時(shí)再去使用 [10]。 內(nèi)蒙古科技大學(xué)畢業(yè)設(shè)計(jì) 說明書 (畢業(yè) 論文 ) 7 調(diào)試和剖析選項(xiàng) GCC 支持?jǐn)?shù)種調(diào)試和剖析選項(xiàng)。 在這些選項(xiàng)里你會(huì)最常用到的是 g 和 pg 選項(xiàng)。 g 選項(xiàng)告訴 GCC 產(chǎn)生能被 GNU 調(diào)試器使用的調(diào)試信息以便調(diào)試你的程序。 GCC 提供了一個(gè)很多其他 C 編譯器里沒有的特性 , 在 GCC 里 能使 g 和 O (產(chǎn)生優(yōu)化代碼 )聯(lián) 用。這一點(diǎn)非常有用因?yàn)槟隳茉谂c最終產(chǎn)品盡可能相近的情況下調(diào)試 代碼。 在同時(shí)使用這兩個(gè)選項(xiàng)時(shí)必須清楚 所寫的某些代碼已 經(jīng)在優(yōu)化時(shí)被 GCC 作了改動(dòng)。 pg 選項(xiàng)告訴 GCC 在 程序里加入額外的代碼 , 執(zhí)行時(shí)產(chǎn)生 gprof 用的剖析信息以顯示 程序的耗時(shí)情況。 GDB 調(diào)試器 GDB 的用法 Linux 包含了一個(gè)叫 gdb 的 GNU 調(diào)試程序。 gdb 是一個(gè)用來調(diào)試 C 和 C 程序的強(qiáng)力調(diào)試器 [11]。它 能在程序運(yùn)行時(shí)觀察程序的內(nèi)部結(jié)構(gòu)和內(nèi)存的使用情況。 以下是 gdb 所提供的一些功能: 它使你能監(jiān)視你程序中變量的值。 它使你能設(shè)置斷點(diǎn)以使程序在指定的代碼行上停止執(zhí)行。 它使你能 一行行的執(zhí)行你的代碼。 /BR在命令行上鍵入 gdb 并按回車鍵就可以運(yùn)行 gdb 了 , 如果一切正常的話 , gdb 將被啟動(dòng)并且 將在屏幕上看到類似的內(nèi)容: GDB is free software and you are wele to distribute copies of it under certain conditions。 type show copying to see the conditions. There is absolutely no warranty for GDB。 type show warranty for details. GDB (i486slakwarelinux), Copyright 1995 Free Software Foundation, Inc. (gdb) 當(dāng)啟動(dòng) gdb 后 , 在命令行上指定很多的選項(xiàng)。也可以以下面的方式來運(yùn)行 gdb : gdb 當(dāng) 用這種方式運(yùn)行 gdb, 能直接指定想要調(diào)試的程序。這將告訴 gdb 裝入名為 fname 的可執(zhí)行文件。也可以用 gdb 去檢查一個(gè)因程序異常終止而產(chǎn)生的 core 文件 , 或者與一個(gè)正在運(yùn)行的程序相連。 內(nèi)蒙古科技大學(xué)畢業(yè)設(shè)計(jì) 說明書 (畢業(yè) 論文 ) 8 用 gdb 調(diào)試 GCC 程序 為調(diào)試編譯代碼 (Compiling Code for Debugging), 為了使 gdb 正常工作 , 你必須使你的程序在編譯時(shí)包含調(diào)試信息。 調(diào)試信息包含你程序里的每個(gè)變量的類型和在可執(zhí)行文件里的地址映射以及源代碼的行號(hào)。 gdb 利用這些信息使源代碼和機(jī)器碼相關(guān)聯(lián)。 在編譯時(shí)用 g 選項(xiàng)打開調(diào)試選項(xiàng)。 gdb 基本命令 : gdb 支持很多的命令使你能實(shí)現(xiàn)不同的功能。 這些命令從簡(jiǎn)單的文件裝入到允許你檢查所調(diào)用的 堆棧內(nèi)容的復(fù)雜命令 ,下面 列出了你在用 gdb 調(diào)試時(shí)會(huì)用到的一些命令。 如: file 裝入想要調(diào)試的可執(zhí)行文件。 kill 終止正在調(diào)試的程序。 list 執(zhí)行一行源代碼但不進(jìn)入函數(shù)內(nèi)部。 next 執(zhí)行一行源代碼但不進(jìn)入函數(shù)內(nèi)部。 step 執(zhí)行一行源代碼而且進(jìn)入函數(shù)內(nèi)部。 run 執(zhí)行當(dāng)前被調(diào)試的程序 。 quit 終止 gdb。 watch 使你能監(jiān)視一個(gè)變量的值而不管它何時(shí)被改變。 break 在代碼里設(shè)置斷點(diǎn) , 這將使程序執(zhí)行到這里時(shí)被掛起。 make 使你能不退出 gdb 就可以重新產(chǎn) 生可執(zhí)行文件。 shell 使你能不離開 gdb 就執(zhí)行 UNIX shell 命令。 gdb 支持很多與 UNIX shell 程序一樣的命令編輯特征 。 你能象在 bash 或 tcsh 里那樣按 Tab 鍵讓 gdb 幫你補(bǔ)齊一個(gè)唯一的命令 , 如果不唯一的話 gdb 會(huì)列出所有匹配的命令 , 你也能用光標(biāo)鍵上下翻動(dòng)歷史命令 [12]。 Makefile 文件的編寫 以上研究了編譯工具 gcc 和調(diào)試工具 gdb,編程的程序文件都要經(jīng)過 編譯、調(diào)試,但是如果系統(tǒng)是的文件很多,又有先后順序時(shí),編譯時(shí)就很麻煩的。因此本系統(tǒng) 使用了makefile 文件。 或 許很多的程序員都不知道這個(gè)東西 makefile ,因?yàn)榇蠖?Windows 的 IDE 都為程序員 做了這個(gè)工作, 在 Unix 下的軟件編譯,你就不能不自己寫 makefile 了,會(huì)不會(huì)寫內(nèi)蒙古科技大學(xué)畢業(yè)設(shè)計(jì) 說明書 (畢業(yè) 論文 ) 9 makefile,從一個(gè)側(cè)面說明了一個(gè)人是否具備完成 大型工程的能力。 因?yàn)?makefile 關(guān)系到了整個(gè)工程的編譯規(guī)則。一個(gè)工程中的源文件不計(jì)數(shù),其按類型、功能、模塊分別放在若干個(gè)目錄中, makefile 定義了一系列的規(guī)則來指 定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作,而且其中還可以執(zhí)行操作系統(tǒng)的命令。 makefile 帶來的好處就是 ——―自動(dòng)化編譯 ‖,一旦寫好,只需要一個(gè) make 命令,整個(gè)工程完全自動(dòng)編譯,極大的提高了軟件開發(fā)的效率。 make 是一個(gè)命令工具,是一個(gè)解釋 makefile 中指令的命令工具,一般來說, 大多數(shù)的 IDE 都有這個(gè)命令,比如: Visual C++的 nmake, Linux 下 GNU 的 make。可見, makefile 都成為了一種在工程方面的編譯方法。 我們要寫一個(gè) Makefile來告訴 make命令如何編譯和鏈接這幾個(gè)文件。我們的規(guī)則是: 如果這個(gè)工程沒有編譯過,那么我們的所有 C文件都要編譯并被鏈接。 如果這個(gè)工程的某幾個(gè) C文件被修改,那么我們只編譯被修改的 C文件,并鏈接目標(biāo)程。 如果這個(gè)工程的頭文件被改變了,那么我們需要編譯引用了這幾個(gè)頭文件的 C文件,并鏈接目標(biāo)程序。 Makefile 的規(guī)則: target ... : prerequisites ... mand ... … target 也就是一個(gè)目標(biāo)文件,可以是 Object File,也可以是執(zhí)行文件。 prerequisites就是,要生成那個(gè) target 所需要的文件或是目標(biāo)。 mand 也就是 make 需要執(zhí)行的命令。這是一個(gè)文件的依賴關(guān)系,也就是說, target 這一個(gè)或多個(gè)的目標(biāo)文件依賴于prerequisites 中的文件,其生成規(guī)則定義在 mand 中。說白一點(diǎn)就是說, prerequisites中如果有一個(gè)以上 的文件比 target 文件要新的話, mand 所定義的命令就會(huì)被執(zhí)行。這就是 Makefile 的規(guī)則 [12]。又例如: objects = \ 于是,我們就可以很方便地在我們的 makefile 中以 ―$(objects)‖的方式來使用這個(gè)變量了 , 我們的 makefile 就變成下面這個(gè)樣子: 內(nèi)蒙古科技大學(xué)畢業(yè)設(shè)計(jì) 說明書 (畢業(yè) 論文 ) 10 文件 CFLAG := g CC := gcc all:serverv3 client serverv3: $(CC) $(CFLAG) o serverv3 *.o lpthread client: $(CC) $(CFLAG) o client *.o lpthread clean: rm rfv serverv3 client *.o 這里我們的文件雖多,但不用我們一個(gè)一個(gè)的去 gcc 編譯, Makefile 文件已經(jīng)安排好 ,以個(gè) make 就可以按照個(gè)各個(gè)文件的依賴順序生成我們想要的 .o 文件。當(dāng)我們想要重新生成編譯時(shí),其中 clean 可以清理掉上次產(chǎn)生的舊文件,這只需要命令 make clean。分別如下圖 和圖 所示。 圖 make 命令的編譯界面 圖 make clean 命令的界面 內(nèi)蒙古科技大學(xué)畢業(yè)設(shè)計(jì) 說明書 (畢業(yè) 論文 ) 11 第三章 實(shí)現(xiàn) 分析 及關(guān)鍵技術(shù) 實(shí)現(xiàn) 分析 功能分析 本系統(tǒng)是要 在 Linux 系統(tǒng)下 實(shí)現(xiàn) 一個(gè)聊天室系統(tǒng),主要有服務(wù)器和客戶端。它具備的基本功 能包括注冊(cè)、登陸、群聊、私聊、查看在線人數(shù) 、查看聊天記錄 等。 服務(wù)器端: 負(fù)責(zé)處理用戶發(fā)來的各種信息, 管理用戶的動(dòng)作 (用戶注冊(cè)、用戶登錄、群發(fā)信息、和特定用戶私聊等 )和管理用戶信息 (保存用戶個(gè)人資料及聊天記錄等 )。 客戶端: 主要是可以查看在線人數(shù)、聊天記錄,發(fā)送信息給特定用戶或群等功能。 (系統(tǒng)各個(gè)功能函數(shù)的清單見附錄 表 ) 設(shè)計(jì) 分析 本聊天系統(tǒng)的 為 c/s 形式,服務(wù)器主要就是處理 客戶 的輸入信息。首先要存儲(chǔ)客戶的個(gè)人資料;再有, 傳輸客戶的聊天信息時(shí),也要 記錄下客戶的聊天記錄,以備查看聊天記錄所用。 當(dāng)然 ,服務(wù)器還有自己的動(dòng)態(tài)數(shù)據(jù)處理。客戶狀態(tài) 分為鏈接客戶、非鏈接客戶 , 我們采用結(jié)構(gòu)體存儲(chǔ)鏈接客戶的信息, 以鏈表式來記錄鏈接客戶。而鏈接客戶又分為登陸用戶與未登陸用戶,這就通過修改鏈表上客戶的名字。當(dāng)客戶以鏈接客戶服務(wù)器端時(shí),也就是還未登錄,就給了客戶一個(gè)統(tǒng)一的名字 ,當(dāng)客戶登 陸時(shí)就把其統(tǒng)一的名字改為客戶登陸名,也就是客戶注冊(cè)時(shí)輸入的名字 。 同時(shí)并發(fā)服務(wù)器要一直在為連接用戶創(chuàng)建線程, 系統(tǒng) 設(shè)計(jì) 的總框圖 [13],如圖 所示。 客戶端 socket 服務(wù)器 圖 系統(tǒng)設(shè) 計(jì)總框圖 內(nèi)蒙古科技大學(xué)畢業(yè)設(shè)計(jì) 說明書 (畢業(yè) 論文 ) 12 技術(shù)分析 基于以上的功能分析和數(shù)據(jù)分析 ,首先通信 Socket套接字是實(shí)現(xiàn) c/s通信的接口,且使用 tcp協(xié)議。 傳輸數(shù)據(jù)時(shí),客戶端需要?jiǎng)?chuàng)建兩個(gè)線程分別監(jiān)聽鍵盤 (即用戶輸入信息 )和socket接口 (即傳入信息 )。服務(wù)器則要給每個(gè)鏈接的客戶創(chuàng)建一個(gè)線程來進(jìn)行信息的傳輸 ,即實(shí)現(xiàn)并發(fā)服務(wù)器 ,正如圖 。 并發(fā)服務(wù)器是指在一個(gè)時(shí)刻可以處理多個(gè)客戶請(qǐng)求的服務(wù)器。這只是概念上和表面的并發(fā),并不一定是真正同時(shí)處理多
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1