

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、局域網(wǎng)文件傳輸系統(tǒng)項(xiàng)目說明需求說明:1,開發(fā)平臺(tái)1.1 linux x86 641.2 支持 Debian Ubuntu1.3 支持 rhel , centos , Fedora2,功能說明1.1 文件上傳與下載,講指定文件上傳到服務(wù)器,抑從服務(wù)器下載文件到指定位置1.2 文件瀏覽,瀏覽本地文件以及服務(wù)器端文件L3 概要功能說明1.3.1 客戶端主要任務(wù):1) 分析用戶輸入的命令2) 根據(jù)命令向服務(wù)器端發(fā)出請(qǐng)求3) 等待服務(wù)器返回的結(jié)果表 1 1 命令含義與請(qǐng)求碼用戶輸入的命令命令含義對(duì)應(yīng)的請(qǐng)求碼Get從服務(wù)器得到文件GETPut向服務(wù)器傳輸文件PUTCd進(jìn)入客戶端的目錄不需要與服務(wù)端通信,因
2、此無請(qǐng)求!cd進(jìn)入服務(wù)器端目錄CDLs列出客戶端當(dāng)前的內(nèi)容不需要與服務(wù)端通信因此無請(qǐng)求Ils列出服務(wù)器端當(dāng)前的內(nèi)容LSConn ect連接服務(wù)器:發(fā)出連接請(qǐng)求,不需要服務(wù)器額外處理Bye退出程序BYE表 12 命令的格式命令的名稱格式說明getget argl arg2oargl:源文件 arg2 :本地路徑。argl , arg2 都是絕對(duì)路徑putput argl argloargl :本地文件 argl:目標(biāo)路徑。argl arg2 都是絕對(duì)路徑!cd!cd argloargl:指定的服務(wù)器目錄。絕對(duì)路徑!ls!ls argloargl 指定的目錄。絕對(duì)路徑conn ectconnect
3、 argloargl:點(diǎn)分十進(jìn)制 IP 地址cdcd argloargl:客戶端的指定目錄,絕對(duì)路徑IsIs argloargl :客戶端指定目錄,絕對(duì)路徑byebyeo1.3.2 服務(wù)器端主要任務(wù)1) 分析請(qǐng)求代碼2) 根據(jù)請(qǐng)求代碼做相應(yīng)的處理3) 等待返回結(jié)果或者應(yīng)答信息表 13 請(qǐng)求碼與相應(yīng)處理請(qǐng)求代碼對(duì)應(yīng)的處理GET向客戶端傳輸文件PUT接受客戶端的文件CD進(jìn)入目錄LS將當(dāng)前目錄內(nèi)容傳輸給客戶端BYE斷開連接通信協(xié)議與服務(wù)器模型:本項(xiàng)目通信協(xié)議分兩種對(duì)于 get 命令和!Is 命令這些需要傳輸文件 內(nèi)容的命令(!Is 需要傳輸列出的目錄文件列表),采用四次握手的通信協(xié)議如圖 1_1 所
4、示傳輸?shù)奈募?nèi)容Server圖 1_1 四次握手通信協(xié)議以 get 命令舉例,get 命令首先發(fā)出 get 請(qǐng)求,服務(wù)器程序接收到請(qǐng)求后,發(fā)送請(qǐng)求的文件長(zhǎng)度或者錯(cuò)誤應(yīng)答碼,接收到文件長(zhǎng)度后客戶端發(fā)送RDY 應(yīng)答信息,服務(wù)器端開始傳輸文件內(nèi)容ServerClientServerClientServerClientClient客戶端命令應(yīng)答信息RDY 信息對(duì)于!CD 命令這種不需要傳輸文件內(nèi)容的命令采取兩次握手通信協(xié)議,如圖客戶端命令1 2 所示Clie nt圖 1_2 兩次握手通信協(xié)議本項(xiàng)目服務(wù)器采用多線程并發(fā)服務(wù)器模型,提供和客戶端的交互。3,源代碼目錄結(jié)構(gòu)SvrI-common.h 總領(lǐng)整個(gè)
5、服務(wù)器程序的頭文件I-command.h 定義命令處理函數(shù)和初始化函數(shù)頭文件I-command.c 定義命令處理函數(shù)和初始化函數(shù)I-main.c 定義程序主干函數(shù)1-makefileCliI-comm on .h 總領(lǐng)整個(gè)服務(wù)器程序的頭文件,常用通文件皆放與此I-command.h 定義命令處理函數(shù)和初始化函數(shù)頭文件I-command.c 定義命令處理函數(shù)和初始化函數(shù)I-main.c 客戶端主干函數(shù).I-inputc 定義命令分解函數(shù),用于處理用戶輸入的命令1-makefile4,核心函數(shù)及數(shù)據(jù)結(jié)構(gòu)定義4.1 客戶端int do_co nn ect(char *ip, i nt *sock_f
6、d);與服務(wù)器端進(jìn)行連接int do_get(const char *srczconst char *dst, int sock_fd);從遠(yuǎn)端服務(wù)器下載文件int do_put(const char *srczconst char *dstzint sock_fd);向遠(yuǎn)端服務(wù)器上傳文件 int do_cd(char *path); 進(jìn)入當(dāng)前主機(jī)指定目錄 int do_ls(char *path);列出當(dāng)前主機(jī)指定目錄下的內(nèi)容 int do_serv_cd(charpath,int sock_fd);進(jìn)入遠(yuǎn)端服務(wù)器指定目錄int do_serv_ls(char *path, int sock
7、_fd);列出當(dāng)前服務(wù)器目 錄信息 intbye(int sock_fd);退出服務(wù)器,關(guān)閉連接 int split(struct commamdine, char line);拆分命 令相關(guān)函數(shù)struct comma nd_li nechar *n ame;命令的名稱char *argvMAX_ARG;命令攜帶的參數(shù);1024向服務(wù)器端發(fā)送命令的最大長(zhǎng)度PORT8000端口號(hào)COMMANDJJNE256用戶輸入客戶端命令的最大長(zhǎng)度MAX LENGTH64每個(gè)參數(shù)或命令的最大長(zhǎng)度ServerClie nt命令執(zhí)行是否成功Server4.2 服務(wù)器int do_get(const char *
8、srczconst char *dstzint sock_fd);處理用戶的 put 命令int do_put(const char *srczconst char *dst, int sock_fd);處理用戶的 get 命令 int do_cd(char*path);處理用戶的! cd 請(qǐng)求int do_ls(char *path);處理用戶的!Is 請(qǐng)求ADDR_LEN 17 點(diǎn)分十進(jìn)制 IP 地址的長(zhǎng)度,包括最后的結(jié)束符5,客戶端執(zhí)行流程5.1 輸出提示信息5.2 接受用戶輸入的命令5.3 輸入命令是否為空,為空則程序正常退出,非空則繼續(xù)5.4 輸入命令是否為 bye,是則程序正常退出
9、,否則繼續(xù)5.5 處理用戶輸入的命令5.6 輸出提示信息,繼續(xù)循環(huán)執(zhí)行5.1 5.5 的過程6,服務(wù)器執(zhí)行流程6.1 服務(wù)器啟動(dòng)6.2 是否接收到一個(gè)連接,是則繼續(xù),否則等待6.3 創(chuàng)建連接是否成功,是則繼續(xù),否則打印出錯(cuò)信息6.4 創(chuàng)建一個(gè)子線程,是則繼續(xù),否則打印出錯(cuò)信息6.5 接收客戶端傳輸?shù)拿?.6 解析命令6.7 重復(fù) 6.26.6 過程部分測(cè)試命令(取決于你放文件的位置,僅供參考):put /home/ubu ntu/L in ux_Ser_Cli/Clie nt/text/a.txt /home/ubu ntu/L in ux_Ser_CIi/Server/text put/h
10、ome/ubu ntu/L inu x_Ser_Cli/Clie nt/text/user.txt /home/ub un tu/Li nu x_Ser_Cli/Server/text get/home/ubuntu/Linux Ser Cli/Server/text/b.txt /home/ubuntu/Linux Ser Cli/Client/text源文件:客戶端:/Clie nt commo n.h#pragma once#i nelude #i nelude #in elude comma nd.hH/Clie nt comma nd.h #pragma once #i nelude
11、ncommo n.h1 #i nclude #defi ne MAX.LINE 1024器端發(fā)送命令的最大長(zhǎng)度#defi ne COMMAND_LINE 256入客戶端命令的最大長(zhǎng)度#defi ne MAX.LENGTH 64數(shù)或命令的最大長(zhǎng)度# nelude #i nelude # nelude #in elude #in elude ;-int do_c onn ect(char *ipzint *sock_fd);器端進(jìn)行連接/向服務(wù)#i nelude # nclude verrno .h/端口號(hào)用戶輸#defi ne MAX.ARG 4 struct comma ndine _char
12、 *n ame;/char *argvMAX_ARG; /int do_get(c onst char *src, const char *dst, int sock_fd);/端服務(wù)器下載文件一/與服務(wù)從遠(yuǎn)向遠(yuǎn)進(jìn)入當(dāng)列出當(dāng):一兒端服務(wù)器上傳文件進(jìn)入遠(yuǎn)列出當(dāng)退出int do_cd(char *path);前主機(jī)指定目錄/服拆分獲int do_ls(char *path);前主機(jī)指定目錄下的內(nèi)容/int do_serv_cd(char *pathzint sock_fd);端服務(wù)器指定目錄/int do_servs(char *pathzint sock_fd);前服務(wù)器目錄信息/int spl
13、it(struct comma nd_| ine *com, char lin e);命令相關(guān)函數(shù)一/char * path_alloc(size_t *sizep);存放完整路徑的內(nèi)存空間起始地址和大J/int in put();struct comma nd I ine comd:/每個(gè)參#defi ne PORT8000命令的名稱命令攜帶的參數(shù)int argv;輸入的參數(shù)個(gè)數(shù)/Clie nt comma nd.c#i ncludeHcommon .hint do_co nn ect(char *ipzi nt *sock_fd) /與服務(wù)器端進(jìn)行連接in t res;sockle n_t
14、 len;char buflOO =,M;struct sockaddrj n svraddGcliaddr;bzero(&cliaddr/sizeof(cliaddr);把一段內(nèi)存區(qū)的內(nèi)容全咅8設(shè)置為0*sock_fd = socket ( PFJNET, SOCK.STREAO);svraddr. sin_family = AFJNET;svraddr. sin_port= htons (1234);inet_pton (AFJNETJp , &(svraddr. sin_addr);res = connect (*sock_fdz(structsockaddr *)(&svraddr),
15、sizeof(svraddr);read (*sock_fd/buf/sizeof(buf);printf CsXnbuf);/prin廿(Co nnet ServerScuess!n)return res;int do_cd(char *path) /進(jìn)入當(dāng)前主機(jī)指定目錄char *ptr; /記錄改變后的文件目錄size_t size;if( chdir (path) d_ name);_closedir(dp);return 0;int do_put(c onst char *src, const char *dst, i nt sock_fd) /向遠(yuǎn)端服務(wù)器上傳文件-FILE *fp
16、;char b_tMAX_LENGTH;/ 記錄argvl的臨時(shí)變量char bufferMAX_LINE;char file_nameMAX_LENGTH;int file_block_le ngth = 0;/文件int i = O.J = OJe n = 0;int res = 0;if(sock_fd = 0)printf (Create Socket Sucess!n);elseperror (Failed!n);exit (1);列出當(dāng)前主機(jī)指定目錄下的內(nèi)容write (sock_fctcomd.nam巳sizGof(); 向月艮務(wù)器發(fā)送操作符printf (Mc
17、omd .n amesXncomd. name); bzero(buffer,sizeof(buffer);strcpy (buffer,src);send (sock_fd,buffGr;sizGof(buffGrj,O);/sen d(sock_fdzsrc,sizeof(src),O);printf (”src:%sn:buffer);bzero(buffer,sizeof(buffer);strcpy (buffer,dst);send (sock_fd/buffer,sizeof(buffer),O);printf (”dst:%sn:buffer);recv (sock.fdbuf
18、feGsizeofCbufferJO); printf CbuffersXnbuffer);if( strcmp (buffer/Ready) = 0)bzero(buffer,sizeof(buffer);strcpy (b_tzsrc);len = strle n (b_t);i = len1;while(b_ti != /)/* 提取文件名 */i-;i+;while(i 0)/Ready/OKprintf (nfile_blockngth=%dn,/file_block_le ngth);file_ name);res = send (sock_fd/buffer/file_block
19、Jength + 1,0);if(res0)printf (Se nd File:t%s Failedn,break; bzero(buffer, sizeof(buffer);廠這段代碼是循環(huán)讀取文件的一段數(shù)據(jù),在循環(huán)調(diào)用send ,端,這里強(qiáng)調(diào)一點(diǎn)的TCP每次接受最多是1024字節(jié)多了就會(huì)分片,因此每次發(fā)送時(shí)盡量不要超過1024字節(jié)。*/fclose (fp);printf (File:t%s Tran sfer Fin ishedn;file_ name);_elseprintf (NOT Ready!nH); return0;int do_get(c onst char *src, c
20、onst char *dstzi nt sock_fd) /從遠(yuǎn)端服務(wù)器下載文件int len gth = 0;int writee ngth;/char file_nameMAX_LENGTH;char bufferMAX_LINE;char b_tMAX_LENGTH;FILE * fp;int i = OJe n = Oj二0;if( sock_fd 0)-prints (Create Socket Failed!n);exit (1);寫入文件長(zhǎng)度/ 記錄argvlelseprintf (HCreat Socket Scuess!nH);write (sock_fdcomdnam巳si
21、zGof(comd.namG);/發(fā)送操作符printf (ncomd .n amG:%sn,/comd. name); bzero(buffer,sizeof(buffer); strcpy(buffer,src);send (sock_fcLbuffer;sizeof(bufferLO); printf (src:%snzbuffer);bzero(buffer,sizeof(buffer);strcpy (buffer,dst);send (sock-fduffecsizeoffbuffer);printf C*dst:%snbuffer);bzero(buffer,sizeof(buf
22、fer);recv (sock-fduffeGsizeobuffer);/Readyprintf (“From ServersXnbuffer);if( strcmp (buffer/Ready) = 0) bzero(buffer,sizeof(buffer);bzero(file_ name, sizeof(file_ name);strcpy (b_t,src);len = strlen (b_t);/* 提取文件名 */i = len1;while(b_ti != 7)i+;while(i 0)/循環(huán)接收,再寫到文件printf (Mle ngth:%dn:le ngth);write
23、Gngth =fwrite (buffeGsizeocharJJe ngth-lzfp);if(writeGngth = len gth)_if(write_le ngth MAX_LINE) break; bzero(buffer,sizeof(buffer);if(le ngth 0)printf (HRecieve Data From Server %s Failed!n;src); exit (1); printf (HRecieve File:t %s From Server%sFin ishednfile_ name, src);fclose (fp);elseprin 廿(11N
24、OT Ready!nH);return 0;int do_serv_cd(char *pathzint sock_fd)/遠(yuǎn)端服務(wù)器指定目錄char bufMAX_LINE =,M;write (sock_fd,comd.nam 巳 sizeof(comd.namG);/操作符-strcpy (buf,path); printf (se nd to SGrvGr:%sn;buf);send (sock_fcLbusizGof(buf)Q);bzero(buf,sizeof(buf);recv (sock_fctbutsizGof(buf)Q);printf (recv from server:
25、%snbuf); return 0;int do_serv_ls(char *pathzint sock_fd)/當(dāng)前服務(wù)器目錄信息-char bufMAX_LINE =,ln;列出進(jìn)入首先發(fā)送write (); /操作符 一strcpy(buf,path);printf (nse nd to server:%snn,buf);send (sock_fcLbusizeof(bufXO);bzero(buf,sizeof(buf);while(l)bzero(buf,sizeof(buf);recv (sock_fdzbufzsizeof(
26、buf),0);if( strcmp (buf/Finish) = 0)break;printf (”sn;buf);首先發(fā)送return 0;int bye(i nt sock_fd)務(wù)器,關(guān)閉連接char buf5 =,M;write (sock_fd,BYE;4);recv (sock_fd,buf,sizGof(buf),0); /prin tf(H%sn;buf);close(sock_fd);printf (Close lin ks!n);return 0;/退出服/Clie nt in put.c#i nelude commonh intin put(i nt *le n)cha
27、r Comma ndCOMMAND_LINE =,H;/int argv;printf (Please En ter Comma nd And Path!n); gets (Command); *le n =strle n (Comma nd);訐(strcmp (Commandbye) = 0)len = -1;memset(&comdQ sizeof(comd); argv = split(dcomctComma nd); return argv;int split(struct comma ndj ine *comzchar lin e) /拆分命令相關(guān)函數(shù)_char ca_tmpCOM
28、MAND_LINE =,M;int i = 0;intj = 0;int k = 0;int flag = 1;int len 二 strle n (li ne);for(i = 0;i argvi = (char *) malloc (sizeof(char)*64);for(i = 0;i argvk = (char *)malloc(sizeof(char);strcpy (com-argvkzca_tmp);/prin tf(com-a:%sn;comargvk);flag = 1; j = 0; mGmsGt(ca_tmpOsizGof(ca_tmp); k+;com-name=(c
29、har *) malloc (sizeof(char)*64); strcpy (com-nam 巳 comargvO); return k;/Clie nt Own_Fu nctio n.c#in elude comma nd.h#ifdef PATH_MAXstatic long pathmax = PATH_MAX;#elsestatic long pathmax = 0;#en chfstatic long posix_versi on = 0;static long xsi_versi on = 0;/*If PATH_MAX is in determ in atezno guara
30、 ntee this is adequate*/ #defi nePATH_MAX_GUESS 1024char *path_alloc(size_t *sizep)int arg = 0;int len = 0;int sock_fd;in t res;char ip100 =,M;char *ptr;size_t size;訐(posix_versi on = 0)posix_version = sysco nf(_SC_VERSION);訐(xsi_versi on = 0) xsi_version二 sysco nf(_SC_XOPEN_VERSION);訐(pathmax = 0)e
31、rrno = 0;if(pathmax = pathco nf(7,_PC_PATH_MAX) 0)訐(errno = 0) pathmax = PATH_MAX_GUESS; else printf(Hpathco nf error for _PC_PATH_MAXM);elsepathmax+;if(posix_version 200112L) & (xsi_version 4) size =pathmax + 1;elsesize = pathmax;if(ptr = malloc (size) = NULL)printf (Hmalloc error for path name11);
32、if(sizep != NULL) *sizep = size;return(ptr);/Clie nt main .c#i ncludencommo n.huint main ()printf (Please en ter IPv4 !n);gets (ip);res = do_c onn ect(ip , &sock_fd);訐(res != 0)perror (Connect Server Failed!n);/exit(l);while(l)prin 廿(P lease en ter the comma nd to be operat in g.rT);loop:arg = in pu
33、t(&le n);if(le n = = 0)perror (The in put is empty,Will be exit!rT);sleep(2);goto loop;else if(le n = = -1)perror (You in put byethe programme wil be exit!n); sleep(l); bye(sock_fd);exit (1);if (arg = 2)if( strcmp (/,cdM) = 0)do_cd(comd.argvl);else 訐(strcmp (/,ls,) = 0) dos(comd.ar
34、gvl);_else 訐(strcmp (/,!cd,) = 0)strcpy (/,CDM); do_serv_cd(comd.argvl,sock_fd);-else 訐(strcmp (/,!ls,) = 0)strcpy (/,LS,); do_serv_ls(comdargvlLsock_fd);-else if(arg = 3)if( strcmp (/,getM) = 0)strcpy (comd.nam 巳“GET”);do_get(comd.argvl/comdeargv2/sock_f
35、d); else 訐(strcmp (comd.namG/put”)= 0) strcpy (/,PUTn);/prin tf(%d,%d,%dnM,sizeof(*(comd. name),sizeof(*(comd.argv l),sizeof(*(comd.argv2);/ prin tf(%sn%sn;comdargvl,comd.argv2);do_put(comd.argvl,comd.argv2/sock_fd);-else printf (Too many parameters or Too few parameters!n1); goto loop;else
36、printf (Too many parameters or Too fewparameters!1n”);goto loop;return 0;/Clie nt Makefile:mai n: mai n.o comma nd.o Own_Fun ctio n.o in put.ogcc -o main mai n.o comma nd.o Own_Fun ctio n.o in put.o mia n. o:mai n.c gcc -c mai n.ccomma nd.o:comma nd.cgcc -c comma nd.cOwn_Fun ctio n. o:Ow n_Fun ctio
37、n.c gcc -c Own_Function.c in put.o:i nputcgcc -c in putc.PHONY:clea n clea n:rm -rf *.o mai n服務(wù)器端:/Server com monh #i nclude #i nclude #i nelude #i nclude #i nclude #in elude #in elude #i nelude #i nelude #in elude 入客戶端命令的最大長(zhǎng)度#defi ne MAX_LENGTH 64數(shù)或命令的最大長(zhǎng)度int do_c onn ect(char *ip,i nt *serv,i nt *
38、sock_fd);/與月艮int do get(const char *srczconst char *dstzint sock fd);/端服務(wù)器下載文件從遠(yuǎn)int do put(const char *src, const char *dst, int sock fd);/端服務(wù)器上傳文件#defi ne MAX_LINE 1024/器端發(fā)送命令的最大長(zhǎng)度#defi ne PORT8000/#defi ne COMMAND_LINE 256/向服務(wù)端口號(hào)用戶輸/向遠(yuǎn)int do_cd(char *path,i nt sock_fd);/進(jìn)入當(dāng)刖主機(jī)指定目錄int do_ls(char *p
39、ath,i nt sock_fd);當(dāng)前主機(jī)指定目錄下的內(nèi)谷/列出char * path_alloc(size_t *sizep);存放完整路徑的內(nèi)存牢間紀(jì)始地土1卜和大/1 intsock_fd;3犬取/Clie nt comma nd.c#i ncludeHcommon .h”if(res != 0)perror (Err in bindn);exit (1);liste n (*serv, 5);len=sizeof(structsockaddrj n );*sock_fd= accept (*serv,(struct sockaddr *)(&cliaddr),&len); send
40、(*sock_fd/YES/Co nn ect Sucess!,/20/0);return 0;int do_cd(char *pathzint sock_fd) /size_t size;if( chdir (path) d_name);send (sockfctbutsizeoHbufXO);printf (%sn;dirp-d_ name);se nd (sock.fd/Fi nish;7,0);prin 廿(”Fi ni shnH);closedir(dp);return 0;int do_put(c onst char *srczconst char *dstzi nt sock_f
41、d) /向客戶端傳送文件FILE * fp;char b_tMAX_LENGTH;/ 記錄argv的臨時(shí)變量char bufferMAX_LINE;char file_nameMAX_LENGTH;int file_block_le ngth = 0;/文彳牛int i = 0j = OJe n二0;if(sock_fd = 0)printf (Create Socket Sucess!n);elseperror (HFailed!nn);exit (1);send (sockfd, Ready,7,0);/Ready_ bzero(buffer,sizeof(buffer);recv (so
42、ck_fctfilG_nam巳sizGof(file_namG),0);接收客戶端的文件名printf (Recv Clie nt File Name:%snfile_name);fp = fopen (src/r);if( NULL= fp)printf (File:t%s Not Fou ndn, file_name);elsebzero(buffer, sizeof(buffer);while( (file_blockJe ngth =fread (buffer/sizeof(char)/MAX_LINE,fp)0)_printf (file_blockngth=%dn/file_blo
43、ck_le ngth);if( send (sock_fd/buffer/file_block_length+l/0)0)prin廿(SGnd File:t%s Failedn;file_ name);break; bzero(buffer, sizeof(buffer);嚴(yán)這段代碼是循環(huán)讀取文件的一段數(shù)據(jù),在循環(huán)調(diào)用send,發(fā)送到客戶端,這里強(qiáng)調(diào)一點(diǎn)的TCP每次接受最多是1024字節(jié)多了就會(huì)分片,因此每次發(fā)送時(shí)盡量不要超過1024字節(jié)?;蛘哌x擇4096效率比較高*/fclose (fp);printf (File:t%s Tran sfer Fin ishedn,file_ name);r
44、eturn 0;int do_get(c onst char *src, const char *dstzi nt sock_fd) /從客戶端接收文件一int len gth = 0;int writeje ngth;/寫入文件長(zhǎng)度char file_nameMAX_LENGTH;char bufferMAX_LINE =,H;char b_tMAX_LENGTH;/ 記錄argv的臨時(shí)變FILE * fp;int i = OJe n 二 Oj 二 0;int len_l 二 0;if( sock_fd 0)-printf (le ngth:%dnzle ngth); write_le ng
45、th =fwrite (bufferrsizeof(char)Je ngth-lzfp);printf (”dn:writG_le ngth);訐(write_le ngth = (le ngth-1) -if(write_le ngth MAX_LINE) break; bzero(buffer,sizeof(buffer);if(le ngth 0)static long xsi_versi on = 0;I*If PATH_MAX is in determ in ate ,no guara ntee this is adequate*/ #defi ne PATH_MAX_GUESS 1
46、024 char*path_alloc(size_t *sizep)char *ptr;size_t size;if(posix_versi on = 0)posix_version = sysco nf(_SC_VERSION);if(xsi_versi on = 0)xsi_version 二 sysco nf(_SC_XOPEN_VERSION); if(pathmax = 0)errno = 0;if(pathmax = pathco nf(7_PC_PATH_MAX) 0)訐(errno = 0)pathmax = PATH_MAX_GUESS;elseprintf (pathco nf error for _PC_PATH_MAXM);-else p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑節(jié)能規(guī)劃方案的可行性分析研究
- 一年級(jí)看圖寫話課堂活動(dòng)方案
- 教育信息化資源共享平臺(tái)建設(shè)方案
- 【新選申報(bào)版】現(xiàn)代型高校校園食堂承包經(jīng)營(yíng)及管理可行性研究方案
- 2024-2030全球硫化鋅光學(xué)元件行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2024-2030全球雷米普利片行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 汽車油漆烤房租賃合同
- 2025年軸流風(fēng)扇項(xiàng)目建設(shè)總綱及方案
- 旅游行業(yè)安全保障措施及實(shí)施方案
- 科技公司企業(yè)文化建設(shè)方案范文
- 2025年安徽水利水電職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫帶答案
- 浙江省浙南名校聯(lián)盟2024-2025學(xué)年高一2月返校檢測(cè)語文試題及答案
- 2025年安徽水利水電職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫往年題考
- 2025年南京信息職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫及答案一套
- 2025年桐城師范高等??茖W(xué)校單招職業(yè)適應(yīng)性測(cè)試題庫審定版
- 2025年中央一號(hào)文件參考試題庫100題(含答案)
- 綠色大氣簡(jiǎn)約國(guó)潮動(dòng)態(tài)三星堆文化宣傳介紹
- 《西亞》教學(xué)課件(第1課時(shí))(25張)公開課教案課件
- 04S519小型排水構(gòu)筑物(含隔油池)圖集
- 家具銷售合同,家居訂購(gòu)訂貨協(xié)議A4標(biāo)準(zhǔn)版(精編版)
- 簽證護(hù)照代領(lǐng)取委托書中英文
評(píng)論
0/150
提交評(píng)論