Linux組網(wǎng)技術(shù)與網(wǎng)絡(luò)通信編程_第1頁(yè)
Linux組網(wǎng)技術(shù)與網(wǎng)絡(luò)通信編程_第2頁(yè)
Linux組網(wǎng)技術(shù)與網(wǎng)絡(luò)通信編程_第3頁(yè)
Linux組網(wǎng)技術(shù)與網(wǎng)絡(luò)通信編程_第4頁(yè)
Linux組網(wǎng)技術(shù)與網(wǎng)絡(luò)通信編程_第5頁(yè)
已閱讀5頁(yè),還剩78頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1Linux 組網(wǎng)技術(shù)與網(wǎng)絡(luò)通信編程組網(wǎng)技術(shù)與網(wǎng)絡(luò)通信編程計(jì)算機(jī)系99級(jí)研究生陳毅東2Linux 組網(wǎng)技術(shù)與網(wǎng)絡(luò)通信編程組網(wǎng)技術(shù)與網(wǎng)絡(luò)通信編程 Linux概述概述 Linux的安裝的安裝 Linux中中Internet服務(wù)的配置服務(wù)的配置 Linux編程環(huán)境簡(jiǎn)介編程環(huán)境簡(jiǎn)介 Linux上上Socket編程及實(shí)例編程及實(shí)例結(jié)束3Linux概述概述 Linux是什么是什么 Linux的發(fā)展歷史的發(fā)展歷史 Linux與與UNIX的關(guān)系的關(guān)系 Linux的版本號(hào)介紹的版本號(hào)介紹返回4Linux是什么是什么Linux是一個(gè)遵循POSIX標(biāo)準(zhǔn)的免費(fèi)操作系統(tǒng),具有BSD和System V的擴(kuò)展特性。它版權(quán)所

2、有者是芬蘭籍的Linus Benedict Torvalds先生和其他開(kāi)發(fā)人員,并且遵循GPL聲明。返回5Linux的發(fā)展歷史的發(fā)展歷史 1991年8月,來(lái)自芬蘭赫爾辛基大學(xué)的年輕人Linus Benedict Torvalds,對(duì)外發(fā)表了一套全新的操作系統(tǒng)(Linux 0.01版)。 1991年10月5日,Linus發(fā)布了Linux的第一個(gè)“正式”版本,即0.02版。在Linux上可以運(yùn)行bash,GCC。最早Linux被放置在一個(gè)FTP服務(wù)器上供大家自由下載,F(xiàn)TP管理員認(rèn)為這是Linus的Minix,因而就建立了一個(gè)Linux目錄來(lái)存放這些文件,于是Linux這個(gè)名字就傳開(kāi)了,現(xiàn)在已經(jīng)成

3、為約定俗成的名稱(chēng)了。 1994年3月14日,Linux終于發(fā)布了它的第一個(gè)正式版本1.0版,而Linux的討論區(qū)也從原來(lái)的comp.os.minix中獨(dú)立成為alt.os.linux后來(lái)又更名為comp.os.Linux。返回6Linux與與UNIX的關(guān)系的關(guān)系 目前,UNIX有兩個(gè)大流派:那就是AT&T發(fā)布的UNIX操作系統(tǒng)System V與美國(guó)加州大學(xué)伯克利分校發(fā)布的UNIX版BSD(Berkeley Software Distribution)。SVR4是兩大流派融合后的產(chǎn)物。特性典型的SVRx典型的xBSD核心名稱(chēng)/unix/vmunix (Linux)終端啟動(dòng)文件/etc/i

4、nittab (Linux) /etc/ttys開(kāi)機(jī)啟動(dòng)文件/etc/rc.d目錄(Linux) /etc/rc.*文件掛上的FS/etc/mnttab/etc/mtab (Linux)常用的Shellsh , kshcsh程序?qū)τ?proc (SVR4和Linux)表1SVR系列和BSD系列的特性比較返回7Linux的版本號(hào)介紹的版本號(hào)介紹 內(nèi)核版本指的是在Linus領(lǐng)導(dǎo)下的開(kāi)發(fā)小組開(kāi)發(fā)出的系統(tǒng)內(nèi)核的版本號(hào),例如:2.0.34和2.1.105等。(一般說(shuō)來(lái),以序號(hào)的第二位為偶數(shù)的版本表明這是一個(gè)可以使用的穩(wěn)定版本,而序號(hào)的第二位奇數(shù)的版本一般有一些新的東西加入,是不一定很穩(wěn)定的測(cè)試版本。)

5、一些組織或廠家將Linux系統(tǒng)內(nèi)核與應(yīng)用軟件和文檔包裝起來(lái),并提供一些安裝界面和系統(tǒng)設(shè)定與管理工具,從而構(gòu)成了一個(gè)發(fā)行套件。相對(duì)于內(nèi)核版本,發(fā)行套件的版本號(hào)隨發(fā)布者的不同而不同,與系統(tǒng)內(nèi)核的版本號(hào)是相對(duì)獨(dú)立的,例如Slackware 7.0,RedHat 7.0,TurboLinux 6.2,RedFlag 1.0等。返回8Linux的安裝的安裝 準(zhǔn)備安裝準(zhǔn)備安裝設(shè)置設(shè)置CMOS準(zhǔn)備硬盤(pán)空間準(zhǔn)備硬盤(pán)空間決定安裝方式并制作相應(yīng)軟盤(pán)決定安裝方式并制作相應(yīng)軟盤(pán) 安裝中的一些注意事項(xiàng)安裝中的一些注意事項(xiàng)硬盤(pán)的分區(qū)硬盤(pán)的分區(qū)配置配置TCP/IP安裝安裝LILO返回9設(shè)置設(shè)置CMOS 在CMOS中把Ant

6、i virus(防止病毒寫(xiě)主引導(dǎo)區(qū))選項(xiàng)關(guān)閉。否則在安裝LILO時(shí)會(huì)出現(xiàn)死機(jī)。 將PnP bios(即插即用)關(guān)閉,否則Linux可能不能正確檢測(cè)用戶的網(wǎng)卡、聲卡和光驅(qū)的參數(shù)。 將啟動(dòng)順序調(diào)整為(A,C);如果BIOS支持CDROM啟動(dòng),而且手上的安裝盤(pán)是可以引導(dǎo)的,則也可以選擇啟動(dòng)順序?yàn)?CDROM,C)。 關(guān)閉CMOS中的Memory Hole選項(xiàng),否則不管用戶內(nèi)存有多大,Linux將只檢測(cè)到16M內(nèi)存。返回10準(zhǔn)備硬盤(pán)空間準(zhǔn)備硬盤(pán)空間 使用硬盤(pán)上有未分區(qū)的空間:為L(zhǎng)inux建立一個(gè)分區(qū)(可在安裝Linux時(shí)使用Linux的fdisk程序來(lái)完成)。 使用硬盤(pán)上有一個(gè)未使用的分區(qū)首先要?jiǎng)h除現(xiàn)

7、在已不同的分區(qū)(可以用DOS的fdisk程序)然后再建立一個(gè)Linux分區(qū)(方法同1 )。 使用分區(qū)上未使用的空間整理原有硬盤(pán)上的數(shù)據(jù)(利用Windows的Defrag程序)改變?cè)杏脖P(pán)分區(qū)的大小,得到未分配空間(可以使用PQMagic等工具)建立新的Linux分區(qū)(同1)返回11決定安裝方式并制作相應(yīng)軟盤(pán)決定安裝方式并制作相應(yīng)軟盤(pán)RedHat提供多種安裝Linux的方法,較常用有:從光盤(pán)安裝、從硬盤(pán)安裝和通過(guò)NFS安裝等。各種安裝方式可能要求不同的啟動(dòng)盤(pán)和補(bǔ)充盤(pán)。例如:從光盤(pán)安裝只需要一張啟動(dòng)盤(pán)(如果機(jī)器能支持光盤(pán)啟動(dòng)且手頭的安裝盤(pán)是可以引導(dǎo)的,則甚至不需要制作這張盤(pán));從硬盤(pán)安裝需要有一張

8、啟動(dòng)盤(pán)和一張補(bǔ)充盤(pán);通過(guò)NFS安裝則需要有一張網(wǎng)絡(luò)啟動(dòng)盤(pán)。在DOS上制作上述各種軟盤(pán)使用的是RedHat Linux安裝盤(pán)dosutils目錄下的rawrite.exe程序。相應(yīng)磁盤(pán)映像則在該安裝盤(pán)的images目錄中。返回12硬盤(pán)的分區(qū)硬盤(pán)的分區(qū)Linux分區(qū)的個(gè)數(shù)分區(qū)的個(gè)數(shù) 安裝Linux至少需要兩種硬盤(pán)分區(qū):一個(gè)或多個(gè)“Linux native”類(lèi)型的分區(qū)和一個(gè)“Linux swap”類(lèi)型的分區(qū)。以下是一些推薦的配置:一個(gè)交換分區(qū)一個(gè)根分區(qū)一個(gè)/usr分區(qū)一個(gè)/home分區(qū)一個(gè)/usr/local分區(qū)一個(gè)/usr/src分區(qū)一個(gè)/tmp分區(qū)一個(gè)/var分區(qū)13硬盤(pán)的分區(qū)硬盤(pán)的分區(qū)Linu

9、x分區(qū)命名規(guī)則分區(qū)命名規(guī)則 Linux通過(guò)字母和數(shù)字的組合來(lái)標(biāo)識(shí)硬盤(pán)分區(qū):前兩個(gè)字母:表明分區(qū)所在設(shè)備的類(lèi)型。通常hd指IDE硬盤(pán),sd指SCSI硬盤(pán)。第三個(gè)字母:表明分區(qū)所處的設(shè)備。例如,/dev/hda指第一個(gè)IDE主盤(pán);/dev/sdb指第二個(gè)SCSI硬盤(pán)。數(shù)字:代表分區(qū)。前四個(gè)分區(qū)(主分區(qū)或擴(kuò)展分區(qū))用數(shù)字1到4表示,邏輯分區(qū)從5開(kāi)始。例如,/dev/hda3指第一個(gè)IDE主盤(pán)上的第三個(gè)主分區(qū)或擴(kuò)展分區(qū);/dev/sdb6則指第二個(gè)SCSI硬盤(pán)上的第二個(gè)邏輯分區(qū)。14硬盤(pán)的分區(qū)硬盤(pán)的分區(qū)fdisk命令概述命令概述fdisk包含有一個(gè)簡(jiǎn)單而有用的在線幫助,下面是一些最常用的命令:m:打印

10、出命令列表。p:列出當(dāng)前的分區(qū)情況。n:增加一個(gè)分區(qū)。l:列出各種分區(qū)類(lèi)型及其對(duì)應(yīng)的值。t:改變一個(gè)分區(qū)的類(lèi)型。w:存盤(pán)并退出。q:不存盤(pán)而退出。返回15配置TCP/IP選擇網(wǎng)絡(luò)配置方式16配置TCP/IP設(shè)置網(wǎng)關(guān)與本地IP17配置TCP/IP設(shè)置域名與主機(jī)名返回18安裝LILO什么是LILOLILO是the LInux LOader的簡(jiǎn)寫(xiě),顧名思義是用來(lái)引導(dǎo)Linux的。事實(shí)上,LILO還是一個(gè)優(yōu)秀的啟動(dòng)管理器。LILO可以安裝在兩個(gè)地方,即主啟動(dòng)記錄(MBR)或Linux根分區(qū)的第一個(gè)扇區(qū)。若將LILO裝在MBR,當(dāng)機(jī)器啟動(dòng)時(shí),LILO將顯示一個(gè)boot:提示,然后,我們就可以啟動(dòng)Linu

11、x或由LILO配置的其他操作系統(tǒng)。若原先已經(jīng)安裝了其他啟動(dòng)管理器(如:System Commander),則應(yīng)把LILO裝在Linux根分區(qū)的第一個(gè)扇區(qū)。這時(shí),我們應(yīng)設(shè)置相應(yīng)的啟動(dòng)管理器來(lái)啟動(dòng)LILO,進(jìn)而啟動(dòng)Linux。19安裝LILO選擇安裝方式20安裝LILO設(shè)置LILO選項(xiàng)21安裝LILO選擇可啟動(dòng)分區(qū)返回22Linux中中Internet服務(wù)的配置服務(wù)的配置 TCP/IP網(wǎng)絡(luò)的配置網(wǎng)絡(luò)的配置 安裝配置安裝配置WWW服務(wù)器服務(wù)器 設(shè)置匿名設(shè)置匿名FTP服務(wù)器服務(wù)器 BBS服務(wù)器的安裝說(shuō)明服務(wù)器的安裝說(shuō)明返回23TCP/IP網(wǎng)絡(luò)的配置網(wǎng)絡(luò)的配置三個(gè)命令三個(gè)命令 ifconfig命令格式:

12、ifconfig interface options例子:ifconfig eth0 02 broadcast 55 netmask route命令格式:route add|del -net|-host destination gw gateway metric metric options例子:route add -net gw 02route add default gw 53route add -host gw host

13、name命令格式:hostname hostname例子:hostname 24TCP/IP網(wǎng)絡(luò)的配置網(wǎng)絡(luò)的配置兩個(gè)文件兩個(gè)文件 /etc/hosts文件說(shuō)明:包含一個(gè)IP地址和對(duì)應(yīng)的節(jié)點(diǎn)名的列表。例子:mtg /etc/resolv.conf文件說(shuō)明:設(shè)置名字服務(wù)器的地址和本網(wǎng)絡(luò)的DNS域名例子:nameserver4返回25安裝配置安裝配置WWW服務(wù)器服務(wù)器準(zhǔn)備準(zhǔn)備 從光盤(pán)上或有關(guān)的ftp站點(diǎn)獲取Apache HTTP服務(wù) 器 的 源 程 序 包 , 其 文 件 名 可 能 是apache_1.3.0.tar.gz。 在安裝目錄/usr/local/etc下,使用命令行

14、“tar zxvf apache_1.3.0.tar.gz” 把取得的源程序包打開(kāi),生成apache_1.3.0目錄。 用命令行“l(fā)n -s apache_1.3.0 httpd”建立一個(gè)名為httpd的符號(hào)連接。 26安裝配置安裝配置WWW服務(wù)器服務(wù)器安裝安裝 將apache_1.3.0/src目錄下的Configuration.tmpl文件拷貝成Configuration,并對(duì)它進(jìn)行編輯。該文件中包含對(duì)一些“Rule”和“Module”的設(shè)置。Apache的設(shè)計(jì)使用可加載模塊的方式,我們?nèi)粝M尤肽衬K,就將該文件中相應(yīng)行前的“”去掉。 運(yùn)行Configure腳本文件,生成Makefile

15、文件。 運(yùn)行make程序,編譯Apache HTTP服務(wù)器。如果一切順利的話,則apache_1.3.0/src目錄下將生成可執(zhí)行文件httpd。 27安裝配置安裝配置WWW服務(wù)器服務(wù)器配置配置 修改Apache HTTP配置文件apache_1.3.0/conf目錄中有三個(gè)的配置文件模版:srm.conf-dist、access.conf-dist和httpd.conf-dist,先將它們分別拷貝成srm.conf、access.conf和httpd.conf,再對(duì)它們進(jìn)行相應(yīng)的修改。http.conf文件:用來(lái)配置服務(wù)器的基本參數(shù)。我們可能需要改動(dòng)其中的Group,ServerAdmin和

16、ServerName。 srm.conf文件設(shè)置文件樹(shù)的根目錄及一些特殊功能,我們應(yīng)定義幾個(gè)目錄別名,去掉該文件中如下的兩行前的“”:Alias /icons/ /usr/local/etc/httpd/icons/ScriptAlias /cgi-bin/ /usr/local/etc/httpd/cgi-bin/ 設(shè)置系統(tǒng)啟動(dòng)方式 httpd可有兩種啟動(dòng)方式:inetd和standalone,可以通過(guò)設(shè)置http.conf文件中的ServerType參數(shù)來(lái)實(shí)現(xiàn)。返回28設(shè)置匿名設(shè)置匿名FTP服務(wù)器服務(wù)器建立帳號(hào)建立帳號(hào)在系統(tǒng)中建立一個(gè)新的用戶ftp和一個(gè)新的用戶組ftp。為了安全,用戶和G

17、ID應(yīng)該是遠(yuǎn)離其它UID和GID的值,例如30000。ftp用戶應(yīng)該屬于ftp組,而且ftp組除了ftp外應(yīng)不含其他用戶。ftp用戶的shell應(yīng)該是一個(gè)不存在的shell或干脆放空。這樣在建立了相應(yīng)用戶后,/etc/passwd文件應(yīng)該包含如下的行: :而/etc/group文件中則有如下行:ftp:*:30000:ftp為管理的方便和安全,我們還可建立一個(gè)FTP管理員帳號(hào),如。對(duì)FTP服務(wù)器中向外發(fā)布文件的管理應(yīng)使用這個(gè)帳號(hào)完成。29設(shè)置匿名設(shè)置匿名FTP服務(wù)器服務(wù)器創(chuàng)建目錄創(chuàng)建目錄匿名FTP服務(wù)器中通常應(yīng)有如下目錄(主目錄/home/ftp用表示): /:這個(gè)目錄的屬主應(yīng)該是root,并

18、且是任何人不可寫(xiě)的(0555)。 /bin:其屬主應(yīng)該是root,并且是任何人不可寫(xiě)的(0111)。其中文件的保護(hù)應(yīng)該是0111。 /lib:這個(gè)目錄的屬主應(yīng)該是root,并且是任何人不可寫(xiě)的(0111)。其中文件的保護(hù)應(yīng)該是0555。 /etc:拷貝/etc/passwd和/etc/group文件到這個(gè)目錄下,并從中刪除除ftp用戶和組以外的其它用戶和組信息。這兩個(gè)文件應(yīng)該是可讀的(0444)。/pub:這個(gè)目錄的屬主和組應(yīng)是FTP管理員()的屬主和組,其保護(hù)應(yīng)該是0755。 /incoming:這個(gè)目錄的屬主和組應(yīng)是ftp,保護(hù)可以是0755或0775。30設(shè)置匿名設(shè)置匿名FTP服務(wù)器服務(wù)

19、器配置文件配置文件 /etc/:定義文件的“飛行”轉(zhuǎn)換規(guī)則。即文件或目錄在使用RETRIEVE命令傳遞過(guò)程中進(jìn)行壓縮(解壓縮)和打包的規(guī)則。這個(gè)文件一般可以拷貝自ftp系統(tǒng)的范例文件。 /etc/:本地用戶若其用戶名出現(xiàn)在本文件中,將不被允許使用此FTP服務(wù)器,我們應(yīng)將root及其他系統(tǒng)帳號(hào)(如:bin、sys)加入到本文件中。 /etc/:本文件中設(shè)置允許或拒絕某些特定節(jié)點(diǎn)(或域)以匿名登錄。例如:allow5deny.*31設(shè)置匿名設(shè)置匿名FTP服務(wù)器服務(wù)器/etc/:FTP服務(wù)器的主要配置文件。# 定義用戶類(lèi)別Classallreal,guest,anonymous

20、*# 定義嘗試登錄次數(shù)loginfails 5# 定義用戶使用命令的權(quán)限compressyesalltaryesallchmodnoguest,anonymousdeletenoguest,anonymousoverwritenoguest,anonymousrenamenoguest,anonymous# 配置上轉(zhuǎn)文件夾upload/home/ yes 0644 dirs返回32BBS服務(wù)器的安裝服務(wù)器的安裝建立帳號(hào)建立帳號(hào) 在/etc/passwd文件中添加如下三行:bbsroot:9990:99:BBS adm:/home/bbsroot:/bin/cshbbs:9999:99:BBS

21、user:/home/bbs:/home/bbs/bin/bbsrfbbsuser:9999:99:BBS user:/home/bbs:/bin/csh 在/etc/group內(nèi)應(yīng)該設(shè)定bbs的group:bbs:*:99:bbs,bbsuser,bbsroot 在/etc/shells中加入/home/bbs/bin/bbsrf。 在/home下建立bbsroot和bbs兩目錄,執(zhí)行如下命令: ( chown bbsroot.bbs bbsroot ; chown bbs.bbs bbs ) 分別替bbsroot和bbsuser設(shè)定密碼。 33BBS服務(wù)器的安裝服務(wù)器的安裝解壓與安裝解壓與

22、安裝 以bbsroot身份登錄系統(tǒng),用tar命令將所得的BBS軟件包解壓。生成bbs_src目錄。 以bbsroot登錄系統(tǒng),到bbs_src/目錄下執(zhí)行:( cd CONFIG ; ./configure )。按要求填寫(xiě)相應(yīng)的BBS信息。編輯得到的Makefile文件,將其中INSTALL=/install -c一行中的/install改為系統(tǒng)install程序的路徑。 在bbs_src/下執(zhí)行make命令,順利的話,bbs_src/目錄下應(yīng)已產(chǎn)生了bbs,bbsrf,chatd及thread四個(gè)文件。 以root登錄系統(tǒng),在/home/bbsroot/bbs_src目錄下執(zhí)行:make i

23、nstallmake installchatdmake installthread返回34Linux編程環(huán)境簡(jiǎn)介編程環(huán)境簡(jiǎn)介 使用編程工具使用編程工具編輯工具編輯工具gcc簡(jiǎn)介簡(jiǎn)介 常用的系統(tǒng)調(diào)用常用的系統(tǒng)調(diào)用返回35編輯工具編輯工具Vi的使用的使用Vi有三種工作方式:正文插入方式、命令方式和ex轉(zhuǎn)換方式。下面介紹最常用的命令::w若正文已經(jīng)被修改,則將正文存盤(pán):q退出Vi編輯程序(不存盤(pán)):q!強(qiáng)行退出Vi編輯程序:x存盤(pán)并退出:!sh進(jìn)入子shell,用ctrl-d返回:set number顯示行號(hào):set nonumber隱藏行號(hào)h(),l(),k(),j()移動(dòng)光標(biāo)i在光標(biāo)所在的字符之

24、前插入正文a在光標(biāo)所在的字符之后插入正文dd刪除當(dāng)前行x刪除光標(biāo)所在的字符/string向前搜索字符string36編輯工具編輯工具Emacs簡(jiǎn)介簡(jiǎn)介Emacs(Editor MACroS)和vi不同,沒(méi)有編輯狀態(tài)和命令狀態(tài)之分,其最重要的概念是其獨(dú)特的緩沖區(qū),Emacs編輯的所有文件都是放在緩沖區(qū)中的,Emacs支持同時(shí)編輯多個(gè)緩沖區(qū),它可以將一個(gè)文件在多個(gè)緩沖區(qū)中打開(kāi)不同的拷貝。一般所有的緩沖區(qū)在硬盤(pán)上都有一個(gè)以“”開(kāi)頭的備份文件,這樣在系統(tǒng)突然崩潰的時(shí)候可以即時(shí)將用戶的工作進(jìn)行備份。在Emacs中,我們可以對(duì)多種程序語(yǔ)言(C,C+,Perl,Lisp等)的程序進(jìn)行編譯,調(diào)試等。Emac為

25、我們提供菜單界面。下面是幾個(gè)常用菜單項(xiàng)的熱鍵(其中,C-表示Ctrl+):Open Files:C-x C-fOpen Directory:C-x C-dSave Buffer:C-x C-sSave Buffer As:C-x C-wExit Emacs:C-x C-c取得幫助:C-h返回37gcc簡(jiǎn)介GNU的C編譯器是gcc,是編程人員最常用的編譯工具。它在編譯C程序生成可執(zhí)行文件看起來(lái)像是一步完成的,但是事實(shí)上,它要經(jīng)歷四個(gè)步驟:預(yù)處理、編譯、匯編和連接。gcc的使用頗為復(fù)雜,選項(xiàng)有上百個(gè)之多,其基本用法為:$ gcc -o prog main.c subr1.c subr2.c sub

26、r3.c這條命令行將main.c、subr1.c、subr2.c、subr3.c編譯連接成可執(zhí)行文件prog。若省略-o選項(xiàng)則gcc使用缺省的可執(zhí)行文件名a.out。返回38常用的系統(tǒng)調(diào)常用的系統(tǒng)調(diào)fork()功能:創(chuàng)建一個(gè)新的進(jìn)程.語(yǔ)法:#include #include pid_t fork ();返回值:成功則子進(jìn)程返回0,父進(jìn)程返回子進(jìn)程號(hào)。失敗返回-1。例子:pid_t pid;if (pid=fork ()0) printf (“Im parentn”); else if (pid=0) printf (“Im childn”); else printf (“fork errorn

27、”); 39常用的系統(tǒng)調(diào)常用的系統(tǒng)調(diào)exec()功能:執(zhí)行一個(gè)文件語(yǔ)法:#include int execl(char *path,char *arg0,.,(char *)0);int execv(char *path,char *argv);int execle(char *path,char *arg0,(char *)0,char *envp);int execve(char *path,char *argv,char *envp);int execl(char * *arg0,.,(char *)0);int execvp(char * *argv);返回值:失敗時(shí)返回-1。例子:e

28、xecl (“/bin/ps” , “ps” , “-ef” , (char *)0);printf (“fork errorn”);exit (-1);40常用的系統(tǒng)調(diào)常用的系統(tǒng)調(diào)wait()和和waitpid()功能:等待一個(gè)子進(jìn)程返回并修改狀態(tài)語(yǔ)法:#include #include pid_t wait (int *stat_loc);pid_t waitpid (pid_t pid , int *stat_loc , int options);返回值:等待到一個(gè)子進(jìn)程返回時(shí),返回該子進(jìn)程號(hào),否則返回-1。同時(shí)stat_loc存放子進(jìn)程的返回值。41常用的系統(tǒng)調(diào)常用的系統(tǒng)調(diào)exit()

29、功能:終止進(jìn)程.語(yǔ)法:#include void exit (int status);說(shuō)明:調(diào)用進(jìn)程被該系統(tǒng)調(diào)用終止。返回值:無(wú)例子:if (fork ()0) wait (int *)0); /*父進(jìn)程等子進(jìn)程*/else /*子進(jìn)程處理過(guò)程*/exit (0); 返回42Linux上上Socket編程及實(shí)例編程及實(shí)例 Berkeley套接字概述套接字概述 套接字基礎(chǔ)知識(shí)套接字基礎(chǔ)知識(shí) 基本套接字基本套接字基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用客戶服務(wù)器模式客戶服務(wù)器模式 DNS的操作的操作 五種五種I/O模式模式 使用使用Inetd 返回43Berkeley套接字概述套接字概述套接字歷史套接

30、字歷史在80年代早期,遠(yuǎn)景研究規(guī)劃局資助了加利福尼亞大學(xué)伯克利分校的一個(gè)研究組,讓他們將TCP/IP軟件移植到UNIX操作系統(tǒng)中。作為項(xiàng)目的一部分,設(shè)計(jì)者們創(chuàng)建了一個(gè)接口,應(yīng)用進(jìn)程使用這個(gè)接口可以方便地進(jìn)行通信。于是就出現(xiàn)了插口接口(Berkeley套接口)。它首先出現(xiàn)在BSD 4.1中。由于許多計(jì)算機(jī)廠商都采用了Berkeley UNIX,于是許多機(jī)器上都可以使用套接字。這樣,套接字就被廣泛使用,到現(xiàn)在已經(jīng)成為事實(shí)上的標(biāo)準(zhǔn)。 44Berkeley套接字概述套接字概述何謂套接字何謂套接字套接字(Socket)英文原意是“插座”,作為BSD UNIX的進(jìn)程通信機(jī)制,它實(shí)質(zhì)上提供了進(jìn)程通信的端點(diǎn)。

31、每個(gè)套接字都包含三個(gè)值:協(xié)議、本地地址和本地端口號(hào)。套接字有本地唯一的套接字號(hào),是一個(gè)整型數(shù)。事實(shí)上它是一個(gè)文件描述符。45Berkeley套接字概述套接字概述套接字類(lèi)型套接字類(lèi)型 流式套接字(SOCK_STREAM):提供可靠的、面向連接的通信流,通過(guò)它發(fā)送的數(shù)據(jù)保證原有順序不變。它使用的是TCP協(xié)議。 數(shù)據(jù)報(bào)套接字(SOCK_DGRAM):定義了一種無(wú)連接的服務(wù),數(shù)據(jù)通過(guò)相互獨(dú)立的報(bào)文進(jìn)行傳輸,是無(wú)序的,并且不保證可靠、無(wú)差錯(cuò)。它使用的是UDP協(xié)議。 原始套接字(SOCK_RAW) :允許對(duì)底層的協(xié)議直接訪問(wèn),主要用于新的網(wǎng)絡(luò)協(xié)議的開(kāi)發(fā)。它功能強(qiáng)大,但沒(méi)有上面兩種套接字方便。 返回46套接

32、字基礎(chǔ)知識(shí)套接字基礎(chǔ)知識(shí)IPv4套接字地址結(jié)構(gòu)套接字地址結(jié)構(gòu)IPv4套接字地址結(jié)構(gòu)在netinet/in.h文件中定義:struct in_addr in_addr_ts_addr;/32位IPv4地址;/網(wǎng)絡(luò)字節(jié)順序struct sockaddr_inuint8_tsin_len;/結(jié)構(gòu)的長(zhǎng)度(=16)sa_family_tsin_family;/AF_INETin_port_tsin_port;/16端口號(hào)/網(wǎng)絡(luò)字節(jié)順序struct in_addr sin_addr;charsin_zero8;/無(wú)用;47套接字基礎(chǔ)知識(shí)套接字基礎(chǔ)知識(shí)IPv6套接字地址結(jié)構(gòu)套接字地址結(jié)構(gòu)IPv6套接字地址結(jié)

33、構(gòu)在netinet/in.h文件中定義:struct in6_addr uint8_ts6_addr16;/128位IPv6地址;/網(wǎng)絡(luò)字節(jié)順序struct sockaddr_in6uint8_tsin6_len;/結(jié)構(gòu)的長(zhǎng)度(=24)sa_family_tsin6_family;/AF_INET6in_port_tsin6_port;/16位端口號(hào)/網(wǎng)絡(luò)字節(jié)順序uint32_tsin6_flowinfo;/優(yōu)先級(jí)和流標(biāo)記/網(wǎng)絡(luò)字節(jié)順序struct in6_addrsin6_addr;48套接字基礎(chǔ)知識(shí)套接字基礎(chǔ)知識(shí)一般套接字地址結(jié)構(gòu)一般套接字地址結(jié)構(gòu) 一般的套接字地址結(jié)構(gòu)在sys/socke

34、t.h文件中定義:struct sockaddruint8_tsa_len;/結(jié)構(gòu)的長(zhǎng)度(=16)sa_family_tsa_family;/地址族:AF_xxxcharsa_data14;/協(xié)議特殊的地址;套接字函數(shù)地址參數(shù)被定義成取得一般的套接字地址結(jié)構(gòu),例如下面的函數(shù):int bind (int , struct sockaddr *, socklen_t)對(duì)它的調(diào)用應(yīng)是如下:struct sockaddr_in serv;bind (sockfd , (struct sockaddr *) &serv , sizeof (serv);49套接字基礎(chǔ)知識(shí)套接字基礎(chǔ)知識(shí)字節(jié)順序轉(zhuǎn)換

35、字節(jié)順序轉(zhuǎn)換(1) 主機(jī)字節(jié)順序和網(wǎng)絡(luò)字節(jié)順序:不同的機(jī)器,內(nèi)部對(duì)變量的字節(jié)存儲(chǔ)順序不同。有的系統(tǒng)是高位在前,低位在后;有的系統(tǒng)則是低位在前,高位在后。這種由特定系統(tǒng)定義的順序我們稱(chēng)為主機(jī)字節(jié)順序。網(wǎng)絡(luò)協(xié)議要求在網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)具有統(tǒng)一的順序,我們稱(chēng)為網(wǎng)絡(luò)字節(jié)順序。 50套接字基礎(chǔ)知識(shí)套接字基礎(chǔ)知識(shí)字節(jié)順序轉(zhuǎn)換字節(jié)順序轉(zhuǎn)換(2) 有關(guān)的轉(zhuǎn)換函數(shù):#include uint16_t htons (uint16_t host16bitvalue);uint32_t htonl (uint32_t host32bitvalue);uint16_t ntohs (uint16_t net16bitval

36、ue);uint32_t ntohl (uint32_t net32bitvalue);51套接字基礎(chǔ)知識(shí)套接字基礎(chǔ)知識(shí)IP地址轉(zhuǎn)換地址轉(zhuǎn)換(1)#include int inet_aton (const char * strptr , struct in_addr *addrptr);/將C字符串轉(zhuǎn)換成地址值。成功返回1,否則返回0。in_addr_t inet_addr (const char * strptr);/將C字符串轉(zhuǎn)換成地址值。成功返回該值,否則返回INADDR_NONE。char *inet_ntoa (struct in_addr inaddr);/將32位二進(jìn)制網(wǎng)絡(luò)字節(jié)順

37、序IPv4地址轉(zhuǎn)換成對(duì)應(yīng)的帶小數(shù)點(diǎn)的十進(jìn)制數(shù)字串。返回值將是該字符串。int inet_pton (int family , const char * strptr , void *addrptr);/將C字符串轉(zhuǎn)換成地址值,成功返回1,字符串格式不合法返回0,錯(cuò)誤返回-1。const char *inet_ntop (int family , const void * addrptr , char *strptr , size_t len);/執(zhí)行與inet_pton相反的功能。失敗返回NULL。52套接字基礎(chǔ)知識(shí)套接字基礎(chǔ)知識(shí)IP地址轉(zhuǎn)換地址轉(zhuǎn)換(2)關(guān)于inet_ntoa的一個(gè)例子:ch

38、ar *a1,*a2;struct in_addr inaddr1,inaddr2;inaddr1.s_addr=htonl (0 xD2220601);inaddr2.s_addr=htonl (0 xD2220666);a1=inet_ntoa (inaddr1);a2=inet_ntoa (inaddr2);printf (“address 1: %s n”,a1);printf (“address 2: %s n”,a2);上面程序的返回值是:address 1: 02address 2: 0253套接字基礎(chǔ)知識(shí)套接字基礎(chǔ)知識(shí)字節(jié)處理函數(shù)字節(jié)處理

39、函數(shù)#include void bzero (void *dest , size_t nbytes);/將目標(biāo)中特定數(shù)目的字節(jié)置0。void bcopy (const void *src , void *dest , size_t nbytes);/從源中拷貝特定數(shù)目的字節(jié)到目標(biāo)中。int bcmp (const void *ptr1 , const void *ptr2 ,size_t nbytes);/比較兩個(gè)任意字符串。相同返回0,否則返回非零。void memset (void *dest , int c , size_t len);/將目標(biāo)中特定數(shù)目的字節(jié)置為值c。void *mem

40、cpy (void *dest , const void *src , size_t nbytes);/從源中拷貝特定數(shù)目的字節(jié)到目標(biāo)中。int memcmp (const void *ptr1 ,const void *ptr2 , size_t nbytes);/比較兩個(gè)任意字符串。相同返回0,否則返回非零。返回54socket ()bind ()listen ()accept ()read ()或recv ()write ()或send ()read ()或recv ()close ()阻塞直到客戶連接建立連接TCP三次握手?jǐn)?shù)據(jù)(要求)數(shù)據(jù)(應(yīng)答)文件結(jié)束標(biāo)志TCP Serversock

41、et ()connect ()write ()或send ()read ()或recv ()close ()TCP Client面向連接套接字的工作流程面向連接套接字的工作流程55socket ()bind ()recvfrom ()sendto ()close ()阻塞直到客戶連接數(shù)據(jù)(要求)數(shù)據(jù)(應(yīng)答)UDP ServerTCP Clientsocket ()sendto ()recvfrom ()無(wú)連接套接字的工作流程無(wú)連接套接字的工作流程返回56基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用socket ()功能:取得套接字描述符。語(yǔ)法:# include int socket (int fam

42、ily , int type , int protocol);返回值:成功時(shí)返回非負(fù)描述符,失敗時(shí)返回-1。說(shuō)明:family參數(shù)指定套接字的協(xié)議族(IPv4為AF_INET、IPv6為AF_INET6);type參數(shù)指定套接字的類(lèi)型(SOCK_STREAM、SOCK_DGRAM或SOCK_RAW)。除非使用原始套接字,否則protocol參數(shù)應(yīng)設(shè)為0。返回57基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用bind ()功能:指定一定的協(xié)議地址到某套接字。語(yǔ)法:# include # include int bind (int sockfd , const struct sockaddr *myaddr

43、 , socklen_t addrlen);返回值:成功時(shí)返回0,失敗時(shí)返回-1。說(shuō)明:通過(guò)指定端口號(hào)為0,讓bind選擇一個(gè)端口號(hào)。通過(guò)如下方法可指定自動(dòng)獲取IP地址時(shí):struct sockaddr_in serv4; /IPv4serv4.sin_addr.s_addr=htonl (INADDR_ANY);struct sockaddr_in6 serv6; /IPv6serv6.sin6_addr=in6addr_any;相關(guān)函數(shù):getsockname ()、setsockopt ()返回58基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用getsockname ()語(yǔ)法:# include

44、# include int getsockname (int sockfd,struct sockaddr *localaddr,socklen_t *addrlen);返回值:成功時(shí)返回0,失敗時(shí)返回-1。說(shuō)明:可能需要使用本函數(shù)的情況主要有三個(gè),即成功地連接之后、用端口號(hào)0調(diào)用bind函數(shù)、在調(diào)用bind時(shí)指定自動(dòng)獲取IP地址。返回59基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用setsockopt ()功能:取得和設(shè)置套接字選項(xiàng)。語(yǔ)法:# include # include int setsockopt (int sockfd,int level,int optname,const void *

45、optval,socklen_t optlen);返回值:成功時(shí)返回0,失敗時(shí)返回-1。說(shuō) 明 : 第 二 個(gè) 參 數(shù) 指 定 系 統(tǒng) 中 解 釋 選 項(xiàng) 的 代 碼(SOL_SOCKET:一般,IPPROTO_IP:IPv4等)。缺省情況下,一個(gè)套接字終止后不能用同一端口重啟。為解決這個(gè)問(wèn)題,服務(wù)器程序中在socket和bind之間通常應(yīng)該用setsockopt函數(shù)設(shè)置選項(xiàng)SO_REUSEADDR:int opt=1;setsockopt (sockfd,SOL_SOCKET,SO_REUSEADDR,&opt , sizeof (opt);返回60基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)

46、用listen ()功能:進(jìn)行系統(tǒng)偵聽(tīng),等待客戶連接。語(yǔ)法:# include int listen (int sockfd , int backlog);返回值:成功時(shí)返回0,失敗時(shí)返回-1。說(shuō)明:當(dāng)一個(gè)套接字被創(chuàng)建時(shí),在缺省的情況下,它是一個(gè)主動(dòng)的套接字,也就是一個(gè)將調(diào)用connect的客戶套接字。這個(gè)函數(shù)的作用就是將一個(gè)尚未連接的套接字轉(zhuǎn)換為一個(gè)被動(dòng)的套接字,也就是內(nèi)核將接收外來(lái)的針對(duì)這個(gè)套接字的連接請(qǐng)求。第二個(gè)參數(shù)是指定了未經(jīng)處理的連接請(qǐng)求隊(duì)列可以容納的最大數(shù)目,推薦值應(yīng)該是5到10。 返回61基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用accept ()功能:完成一個(gè)連接。語(yǔ)法:# incl

47、ude # include int accept (int sockfd, struct sockaddr *cliaddr,socklen_t *addrlen);返回值:成功時(shí)返回非負(fù)描述符,失敗時(shí)返回-1。說(shuō)明:當(dāng)本函數(shù)被調(diào)用時(shí),TCP服務(wù)器將從等待隊(duì)列的前面返回下一個(gè)連接。如果該隊(duì)列為空則在阻塞套接字的情況下服務(wù)器進(jìn)程將轉(zhuǎn)入阻塞狀態(tài)。函數(shù)成功返回后將返回一個(gè)新的套接字描述符,用來(lái)表示這個(gè)連接。遠(yuǎn)程主機(jī)的信息將由參數(shù)cliaddr返回,而該地址結(jié)構(gòu)的大小將由addrlen返回。相關(guān)函數(shù):getpeername ()返回62基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用getpeername ()功

48、能:返回與一個(gè)套接字相關(guān)的遠(yuǎn)程協(xié)議地址。語(yǔ)法:# include # include int getpeername (int sockfd,struct sockaddr *peeraddr,socklen_t *addrlen);返回值:成功時(shí)返回0,失敗時(shí)返回-1。說(shuō)明:通常服務(wù)器在調(diào)用了accept完成一個(gè)連接后就可以獲得遠(yuǎn)程主機(jī)的有關(guān)信息。但有一種特殊的情況,即服務(wù)器本身不調(diào)用accept,它是被調(diào)用accept的進(jìn)程用exec啟動(dòng)的。這時(shí),服務(wù)器進(jìn)程若需要知道遠(yuǎn)程主機(jī)的信息就必須調(diào)用本函數(shù)。返回63基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用connect ()功能:和指定服務(wù)器建立連接。

49、語(yǔ)法:# include # include int connect (int sockfd,const struct sockaddr *servaddr,socklen_t addrlen);返回值:成功時(shí)返回0,失敗時(shí)返回-1。說(shuō)明:sockfd是一個(gè)由socket函數(shù)返回的套接字描述符。第二和第三個(gè)參數(shù)分別是指向一個(gè)套接字的指針和其大小。在調(diào)用本函數(shù)之前,我們并不需要調(diào)用bind函數(shù),內(nèi)核將為我們選擇一個(gè)端口號(hào)和IP地址。本函數(shù)不僅可以用來(lái)進(jìn)行TCP連接,而且可以用在UDP中。當(dāng)對(duì)一個(gè)UDP套接字使用本函數(shù)時(shí),內(nèi)核僅記錄對(duì)方的IP地址和端口號(hào),然后直接返回到調(diào)用進(jìn)程。返回64基本套接字

50、系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用write ()功能:向一個(gè)套接字發(fā)送一定字節(jié)的數(shù)據(jù)。語(yǔ)法:# include # include ssize_t write (int sockfd, const void *buff,size_t nbytes);返回值:返回已成功發(fā)送字節(jié)數(shù),失敗返回-1。65基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用read ()功能:從一個(gè)套接字接收一定字節(jié)的數(shù)據(jù)。語(yǔ)法:# include # include ssize_t read (int sockfd , void *buff , size_t nbytes);返回值:返回讀到字節(jié)數(shù),讀到EOF時(shí)返回0,失敗返回-1。說(shuō)明:

51、在流式套接字中也使用read和write函數(shù),但其行為和在通常文件I/O時(shí)不同。在這里,一個(gè)read或write可能發(fā)送或接收比所要求量小的數(shù)據(jù),但這卻不是一個(gè)錯(cuò)誤。原因是這個(gè)調(diào)用可能已經(jīng)到達(dá)了套接字在內(nèi)核中的緩沖區(qū)限制。這時(shí)只需再次調(diào)用read或write就可以了。這種現(xiàn)象在我們調(diào)用read時(shí)經(jīng)常發(fā)生,而僅當(dāng)我們的套接字是非阻塞的(見(jiàn)后)時(shí),才會(huì)出現(xiàn)在write調(diào)用中。66基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用send ()功能:向一個(gè)套接字發(fā)送一定字節(jié)的數(shù)據(jù)。語(yǔ)法:# include # include ssize_t send (int sockfd, const void *buff,s

52、ize_t nbytes, int flags);返回值:返回已成功發(fā)送字節(jié)數(shù),失敗返回-1。67基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用recv ()功能:從一個(gè)套接字接收一定字節(jié)的數(shù)據(jù)。語(yǔ)法:# include # include ssize_t recv (int sockfd, void *buff, size_t nbytes,int flags);返回值:返回讀到字節(jié)數(shù),失敗返回-1。說(shuō)明:recv和send函數(shù)和標(biāo)準(zhǔn)的read和write函數(shù)很類(lèi)似。唯一的差別就在于其調(diào)用的第四個(gè)參數(shù)。recv和send函數(shù)的第四個(gè)參數(shù)是一個(gè)整型的標(biāo)志位。我們可以以位或的形式包含系統(tǒng)允許的一系列標(biāo)志,

53、從而設(shè)置在這一次I/O的特性。通常情況下這個(gè)參數(shù)都被置為0,實(shí)現(xiàn)普通read和write的功能。返回68基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用close ()功能:關(guān)閉套接字描述符。語(yǔ)法:# include int close (int sockfd);返回值:成功時(shí)返回0,失敗時(shí)返回-1。說(shuō)明:調(diào)用本函數(shù)后,參數(shù)所描述的套接字將被標(biāo)記成關(guān)閉的。從此該套接字對(duì)于對(duì)應(yīng)進(jìn)程將是不可用的。返回69基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用sendto ()功能:發(fā)送一定字節(jié)數(shù)的UDP數(shù)據(jù)報(bào)。語(yǔ)法:# include # include ssize_t sendto (int sockfd, const vo

54、id *buff,size_t nbytes , int flags ,const struct sockaddr *to,socklen_t addrlen);返回值:返回已成功發(fā)送字節(jié)數(shù),失敗返回-1。70基本套接字系統(tǒng)調(diào)用基本套接字系統(tǒng)調(diào)用recvfrom ()功能:接收一定字節(jié)數(shù)的UDP數(shù)據(jù)報(bào)。語(yǔ)法:# include # include ssize_t recvfrom (int sockfd, void *buff,size_t nbytes, int flags,struct sockaddr *from,socklen_t *addrlen);返回值:返回讀到字節(jié)數(shù),失敗返回-

55、1。說(shuō)明:recvfrom和sendto參數(shù)主要是用在未連接的UDP套接字中的,其前面四個(gè)參數(shù)和recv及send相同,參數(shù)to和from分別指定所接收數(shù)據(jù)報(bào)的源地址和所發(fā)送數(shù)據(jù)報(bào)的目標(biāo)地址。參數(shù)addrlen則指定地址結(jié)構(gòu)的大小。返回71客戶服務(wù)器模式客戶服務(wù)器模式服務(wù)器可以分成兩類(lèi):重復(fù)型或并發(fā)型: 重復(fù)型服務(wù)器的流程:i1、等待一個(gè)客戶請(qǐng)求的到來(lái)。i2、處理客戶請(qǐng)求。i3、發(fā)送響應(yīng)給發(fā)送請(qǐng)求的客戶。i4、返回i1。并發(fā)型服務(wù)器的流程:c1、等待一個(gè)客戶請(qǐng)求的到來(lái)。c2、啟動(dòng)一個(gè)新服務(wù)器進(jìn)程處理客戶請(qǐng)求,處理完畢并發(fā)送回應(yīng)后該新進(jìn)程終止。c3、返回c1。一般說(shuō)來(lái),TCP服務(wù)器是并發(fā)的,而U

56、DP服務(wù)器是重復(fù)的。返回72DNS的操作的操作DNS簡(jiǎn)介簡(jiǎn)介到目前為止,我們?nèi)允褂脭?shù)字地址和數(shù)值端口號(hào),在編寫(xiě)實(shí)際程序時(shí)我們應(yīng)該使用名字。使用名字有諸多好處:名字容易記憶,數(shù)字地址可能變更而名字卻不常改變,轉(zhuǎn)到IPv6后其地址的長(zhǎng)度也要求我們使用名字。DNS是(Domain Name System,域名系統(tǒng))主要就是用來(lái)在主機(jī)和IP地址之間進(jìn)行映射的。這里的主機(jī)名可以是簡(jiǎn)單名或FQDN(fully qualified domain name,完全限定的域名)。我們?cè)诔绦蛑锌梢允褂靡恍┖瘮?shù)查詢名字服務(wù)器,達(dá)到在名字和地址之間進(jìn)行轉(zhuǎn)換的目的。73DNS的操作的操作gethostbyname ()功能:查找主機(jī)名返回IP地址。語(yǔ)法:# include struct hostent *gethostbyname (const char *hostname

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論