版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、刖言在 Linux 環(huán)境下,使用 GNU C 或 GNU C+ ,在 UNIX/Linux make開發(fā)工具的的管理和控制下,利用UNIX/Linux Socket 庫在網(wǎng)絡(luò)的底層進(jìn)行開發(fā)設(shè)計。本次設(shè)計運(yùn)用c語言為基礎(chǔ)編 程,同時聯(lián)系數(shù)據(jù)庫的使用和有關(guān) unix_socket的使用,但這 部分類容對我們來說是相當(dāng)生疏的,以前沒有正式的學(xué)過。先 在老師的引導(dǎo)下學(xué)了解了基本類容。我們做的是購物系統(tǒng)根據(jù) 設(shè)計的要求必須要在完成通信功能的基礎(chǔ)上,完成自己設(shè)計所 要完成的功能。整個設(shè)計的中心類容就是要在運(yùn)用數(shù)據(jù)庫的基 礎(chǔ)上完成客戶端和服務(wù)器的通信,所以我們一組的人先運(yùn)用 c 語言完成對基本的程序要求,然
2、后再根據(jù)所要完成的功能重用 的數(shù)據(jù)庫的類容創(chuàng)建數(shù)據(jù)庫可所要的表。設(shè)計過程中由于用到好多套接字的內(nèi)容,好多函數(shù)的運(yùn)用都很生疏,我們一組的人在一起商量外,還大量利用網(wǎng)絡(luò)資 源,尤其是在運(yùn)用一些數(shù)據(jù)庫的函數(shù)進(jìn)行編程的時候更是進(jìn)度 很慢,在寫程序的過程中還得像這怎么把數(shù)據(jù)庫的內(nèi)容在運(yùn)行 是能起上作用,總之整個過程并不是像剛開始時想的那么簡 單。目錄一設(shè)計時間及地點、設(shè)計目的和要求三、設(shè)計題目和內(nèi)容四、設(shè)計方法和步驟五、流程圖六、設(shè)計成果的編制七、程序代碼八、心得體會一設(shè)計時間及地點這次設(shè)計整個過程我們在都在院機(jī)房,從8月25開始的設(shè)計,第一天我們先進(jìn)行總體大的框架的構(gòu)想,想出有關(guān)購物系統(tǒng)所要完成的功能
3、,在對所要寫的程序進(jìn)行整體的劃分,總基礎(chǔ)整個過程所要設(shè)計學(xué)過的和要運(yùn)用的剛了解的東西,大的思路出來以后再對組中的成員進(jìn)行工作分工,前兩天我們所完成的主要的工作就是了解并能掌 握在進(jìn)程之間的通信,這是整個設(shè)計最基礎(chǔ)的東西,也是最最重要的地方。然后解下 來的時間就是對程序的構(gòu)思和寫就,因為在寫程序的過程中要用到數(shù)據(jù)庫的類容,所以在程序?qū)懗鲆徊糠忠院笤诮駵y試的都要建立相應(yīng)的數(shù)據(jù)庫。測試和調(diào)試出來很多的問題,在老師和同學(xué)的幫助下最后都解決了。二、設(shè)計目的和要求1、設(shè)計目的這里的中間件是指交易型中間件。交易型中間件是指用在不同行業(yè)、不同部門間的通訊和協(xié)議轉(zhuǎn)換的軟件 ,在不同的行業(yè)、不同的系統(tǒng)間提供通訊轉(zhuǎn)
4、發(fā)和協(xié)議轉(zhuǎn)換的橋梁作用。例如電子商務(wù)、銀行代理業(yè)務(wù)軟件等都是這種類型的軟件。本設(shè)計不是基于WEB的,不需要很多與 WEB開發(fā)相關(guān)的知識,主要是利用UNIX系統(tǒng)提供的Socket庫在網(wǎng)絡(luò)底層,開發(fā)交易型中間件。本設(shè)計的目的是使參與設(shè)計者掌握利用軟件工程的思想方法和TCP/IP設(shè)計出用于不同行業(yè)和部門間的通訊轉(zhuǎn)發(fā)或協(xié)議轉(zhuǎn)換軟件一中間件,尤其掌握這種設(shè)計的思想和方法。在很多場合中間件部分是必須的,因為在不同的行業(yè)的網(wǎng)絡(luò)是不允許直通的。這里有政策的因素,有制度的要求,也有技術(shù)的成份。設(shè)計理念:設(shè)計一個項目,學(xué)會一個方法,做好一項工程。2、設(shè)計要求1)紀(jì)律要求(1) 嚴(yán)格遵循軟件實習(xí)的有關(guān)安排,按時完成
5、設(shè)計任務(wù)。(2) 嚴(yán)格遵守學(xué)校的紀(jì)律和機(jī)房的各項管理規(guī)定。(3)嚴(yán)格請假制度,需請假時,必須經(jīng)指導(dǎo)老師批準(zhǔn)。2)技術(shù)要求按軟件工程的思想和方法來設(shè)計這一項目,并把它作為一個工程來做。設(shè)計的每一步都有要形成文檔,成品”出來以后要有使用說明書和測試報告。最后按院方統(tǒng)一要求整理出軟件實習(xí) 論文”,并分別以電子和書面文檔的形式上交 。因不是針對某個具體業(yè)務(wù)系統(tǒng)的,該系統(tǒng)的設(shè)計只是一個大的框架,但要求對實 際系統(tǒng)進(jìn)行模擬,能針對實際系統(tǒng)更好。建議模擬移動公司的手機(jī)代收費(fèi)系統(tǒng)。要求本設(shè)計的三部分都要對所接收和發(fā)送的數(shù)據(jù)以文件形式留跡并同時在屏幕上顯 示??蛻舳艘髮邮盏降姆祷財?shù)據(jù)進(jìn)行正確格式的顯示或打印
6、。服務(wù)器端要先建立模擬用數(shù)據(jù)文件或數(shù)據(jù)庫,這是服務(wù)的基礎(chǔ)。服務(wù)器數(shù)據(jù)庫要求使用Linux提供的免費(fèi)的MySQL。開發(fā)時主要用到C訪問MySql 的接口程序 MySql C API。該設(shè)計的三個部分都要設(shè)計出程序 ,并要在驗收時進(jìn)行演示。3)具體要求(1)客戶端客戶端程序可命名為client,要求帶有兩個命令行參數(shù)一個是服務(wù)(自己定義,定義在/etc/services 中,比如 mysvr1 5678 ),另一個是目的主機(jī) (定義在/etc/hosts 內(nèi),也 可使用DNS來解析),缺省時為本機(jī)??蛻糁辽僖獙崿F(xiàn)如下功能:用戶管理;查詢;交易(交費(fèi),購物等);撤銷;統(tǒng)計。(2)中間件中間件程序命名
7、為 middleware ,要帶有三個參數(shù),一個是服務(wù)器的服務(wù) (名字,與客 戶端同),第二個作為請求的服務(wù) (自己定義,定義在/etc/services 中,要區(qū)別于客戶 端,比如mysvr2 5679 ),第三個為目的主機(jī) (定義在/etc/hosts內(nèi)),缺省時為本機(jī)。中間件要完成與客戶要求相符的功能 :是本地的本地處理,否則發(fā)往服務(wù)器方。具體 地是:接收客戶方數(shù)據(jù);組織服務(wù)器方所需數(shù)據(jù);重組服務(wù)方返回數(shù)據(jù),并返回給客戶方。(3)服務(wù)器服務(wù)器程序可命名為 server,要求帶有一個服務(wù)參數(shù),與中間件的mysvr2同。 服務(wù)器方程序要完成客戶端或中間件提出的業(yè)務(wù)請求,并做好留跡工作。(4)
8、留跡或log留跡或log工作在客戶端、中間件和服務(wù)器三方都要做,以供統(tǒng)計或核對使用??蛻舳嘶蛑虚g件方可以使用文本文件或數(shù)據(jù)庫,但在服務(wù)器方張須使用 MySql數(shù)據(jù)三.流程圖如下2.商品搜索流程圖3.用戶登錄流程圖4.購物流程圖四客戶端的功能實現(xiàn)部分及源代碼?客戶端是打開一通信通道,并連接到服務(wù)器所在主機(jī)的特定端口。向服務(wù)器發(fā)服務(wù)請求,等待并接收應(yīng)答;請求結(jié)束后關(guān)閉通信通道。socket程序庫是UNIX網(wǎng)絡(luò)上最普及的API,可調(diào)用socket程序庫 提供的各個程序開發(fā)網(wǎng)絡(luò)軟件和網(wǎng)絡(luò)系統(tǒng)。TCP/IP協(xié)議被集成到UNIX 內(nèi)核中時相當(dāng)于在UNIX系統(tǒng)引入了一種新型的I/O操作。UNIX用戶進(jìn) 程與
9、網(wǎng)絡(luò)協(xié)議的交互作用比用戶進(jìn)程與傳統(tǒng)的I/O設(shè)備相互作用復(fù)雜得多。在UNIX系統(tǒng)中,網(wǎng)絡(luò)應(yīng)用編程界面有兩類:UNIX BSD的套接字 (socket)和UNIX System V 的TLI。由于Sun公司采用了支持 TCP/IP的 UNIX BSD操作系統(tǒng),使TCP/IP的應(yīng)用有更大的發(fā)展,其網(wǎng)絡(luò)應(yīng)用編程界面 (套接字)在網(wǎng)絡(luò)軟件中被廣泛應(yīng)用其中和套接字有關(guān)的函數(shù)有:創(chuàng)建套接字一socket()地址綁定一bind()建立連接一connect()與accept()監(jiān)聽 連接 一listen()數(shù)據(jù)傳輸一send()/write()與 recv()/read()關(guān)閉套接字 close() o數(shù)據(jù)可中
10、所用的東西有:在命令提示符下輸入:mysql或 mysql root進(jìn)入mysql系統(tǒng)。提示符為“ > ”可以使用的命令有: show databases / tables;use database;create database db;create table tbl;drop database db/ table tbl;select from tbl where in sert in totbl values update tbl setwhere delete from tbl where 因為我們要完成的事網(wǎng)上購物系統(tǒng),所以客戶端組要是完成查詢 可購買的功能,所以所用的到數(shù)據(jù)庫
11、也相對的簡單??蛻舳瞬糠衷创a#in clude <time.h>#in clude <stdio.h>#in elude <sys/types.h>#in elude <fcn tl.h>#in elude <sys/soeket.h>#in elude <n eti net/in.h>#in elude <n etdb.h>#in elude <mysql/mysql.h>#defi neree_le ngth20main (i nt argc,char *argv)struct hostent
12、 *hp;struct sockaddr_in sin;struct serve nt *sp;char e;char buff1000,cmd500,sp name13,sp num6;ints,err_code,recs,flds,i,rd_l,wr_l;intop;char *service,*dest,*log="clt .lo g"MYSQL mysql;MYSQL_RES *result;MYSQL_ROW row;1.運(yùn)用unix_socket的內(nèi)容完成服務(wù)器與客戶端的基本定義if(argc!=1) service=argv1; dest=argv2;else
13、 fprin tf(stderr,"NO service assig ned!nU sage:");fprin tf(stderr,"%s service_ name dest in ati on !n",argv0);fprin tf(stderr,"Note: service_ name is defi ned in /etc/servicesn");fprin tf(stderr,"dest in ati on is defi ned in /etc/hostsn");exit(-1);spri ntf(cm
14、d,"touch %s",log);system(cmd);err_code=0;if(mysql_i nit(&mysql)=NULL)/2fprin tf(stderr,"Error in mysql_ in it!n");exit(-1); /22把服務(wù)器與客戶端通過說句庫連接起來,并完成基本的通信功能/2/conn ect to DBif(!mysql_real_co nn ect(&mysql,"localhost","root",0,"clt",0,NULL,0) f
15、printf(stderr,"Error in connection: %s %dn", mysql_err or(&m ysql),mysql_err no(&m ysql);mysql_close(&m ysql);err_code=-2;goto mysql_err;112/ query();sprintf(cmd,"SELECT * FROM main");/execute queryif(mysql_query (&m ysql,cmd)!=0)5fprin tf(stderr,"Error in qu
16、ery: %s %dn",mysql_err or(&m ysql),mysql_err no(&m ysql);/mysql_close(&m ysql);err_code=-3;goto mysql_err;5/5/get resultif(result=mysql_store_result (&m ysql)=NULL)fprin tf(stderr,"Error in store_result: %s %dn",mysql_err or(&m ysql),mysql_err no(&m ysql); mysq
17、l_free_result(result);/mysql_close(&m ysql);err_code=-4;goto mysql_err;/5mysql_err:if(err_code!=0)mysql_close(&m ysql); exit(-1);/spri ntf(buff,"1|");recs=mysql_ num _rows(result);flds=mysql_ nu m_fields(result);if(recs=0) fprin tf(stderr,"No Data in Table UNIT");goto mys
18、ql_err2;/process result setbzero(buff,500);prin tf("nin put the n ame of goods:");scanf("%s",spname); spname13='0:row=mysql_fetch_row(result);getdate(cmd);/ getdate Date + uni t_code + jnlspri ntf(buff,"1|%s|%8.8s%4.4s%5.5d|%4.4s|",sp name,cmd,row0,atoi(row1),row0);
19、i=atoi(row1) + 1;spri ntf(cmd,"UPDATE main set curr_j nl='%d' whereun it_id=%s"',i,row0);/fprin tf(stderr,"%sn",cmd);if(mysql_query (&m ysql,cmd)!=O)5fprin tf(stderr,"Error in query: %s %dn",mysql_err or(&m ysql),mysql_err no(&m ysql);/mysql_clos
20、e(&m ysql);err_code=-3;goto mysql_err;5mysql_err2:mysql_free_result(result);mysql_err1:mysql_close(&m ysql);leb_se nd:if(sp=getservb yn ame(service,"tcp")=NULL)fprin tf(stderr,"Error: getservb yn ame");exit(-5);if(hp=gethostb yn ame(dest)=0)exit(-6);bzer o(&sin, sizeo
21、f(s in);bcopy(hp->h_addr, &sin.sin _addr,hp->h_le ngth);sin.sin _family=hp->h_addrtype;sin.sin _port=sp->s_port;if(s=socket(AF_INET,SOCK_STREAM,0)=-1)fprin tf(stderr,"Error: socket");exit(-6);if(conn ect(s,&sin, sizeof(s in)=-1)fprin tf(stderr,"Error: conn ect"
22、;);close(s); exit(-6);/ n ext 2 Line build request messageif(wr_l=write(s,buff,strle n(buff)!=strle n(buff) /to serverfprin tf(stderr,"Write Socket s ERROR'n!");close(s); exit(-1);if(rd_l=read(s,cmd,500)=0) /get replay from serverclose(s); exit(-2);close(s);printf("%stsend: %sntge
23、t reply:(%d Bs) %sn",argvO,buff,rdl_l,cmd);cmdrd='0:buffwr_l='O'strcat(buff,"|OKO0");wr_l+=6;strn cat(buff,cmd,rd_l);wr_l+=rd_l;buffwr_l+='n:if(flds=ope n( log,O_WRONLY|O_APPEND)=-1)fprintf(stderr,"File %s open error!'n",log);exit(-5);if(write(flds,buff,w
24、r_l)!=wr_l)fprin tf(stderr,"File %s write error!n",l og);close(flds); exit(-6);close(flds);while(1) bzero(buff,500);bzero(sp nu m,6);getdate(cmd);prin tf("other tran sact ion s:");4:quit(q/Q)n");printf(” n please in put your opti on :1:query 2:buy3:pri ntscan f("%d"
25、;, &op);if(op=4) exit(O);if(op=2)printf(” nnu mber:");scan f("%s",sp nu m);sp num6='0:spri ntf(buff,"%1.1d|%s|%s|%8.8s%4.4s|%5.5d|%4.4s|",op,sp name,sp num,cmd,row0,atoi(row1),row0);prin tf("n=%s=n",buff);/goto leb_se nd;exit(0);getdate(char *d)int i;time_t
26、 t,t1;struct tm *t_m;if(t=time(&t1)=-1) return -1;t_m=localtime( &t);spri ntf(d,"%4.4d%2.2d%2.2d",t_m->tm_year+1900,t_m->tm_mo n+1,t_m->tm_mday);d8='0'return 0;3,服務(wù)器端的功能實現(xiàn)及源代碼服務(wù)器端所用到的函數(shù)與客服端的幾乎是一樣的,用到套接字的內(nèi)容,和數(shù)據(jù)庫的東西,但是其中的數(shù)據(jù)庫要相對復(fù)雜。他可以接收來自客 服端的命令請求,并分析命令然通過數(shù)據(jù)庫對客服端的請求給予
27、答復(fù)。服務(wù)器端的源代碼為#i nclude <stdio.h>#in elude <stdlib.h>#in elude <sys/types.h>#in elude <fcn tl.h>#in elude <sys/soeket.h>#in elude <n eti net/in.h>#in elude <n etdb.h>#in elude<mysql/mysql.h>#defi ne ree_le ngth20void strsplit(ehar *,char *,char);main (i
28、nt arge, char *argv )/1 mai nstructsoekaddr_ in sin;structserve nt *sp;int s,n s,pid;char d=T,tmp1000,buff500,cmd500;char *service,*log="svr.log"/ char s="1234|567|7|90|abcd|efghijklm nop|"char *str;char *v100,*tt;int i,j,recs,flds,err_code,c,rd_l,wr_l;double pay;/declare structu
29、re and vars.MYSQL mysql;MYSQL_RES *result;MYSQL_ROW row;if(argc!=1) service=argv1;else 2fprin tf(stderr,"NO service assig ned!nU sage:n");fprin tf(stderr,"t%s server_ name!' n",argv0);fprintf(stderr,"Note: svr_name is defined in file /etc/servicesn"); exit(-1);2spri
30、 ntf(cmd,"touch %s",log);system(cmd);for(i=0;i<100;i+) vi=NULL;1. 數(shù)據(jù)庫的初始化和套接字的運(yùn)用/in itialize MYSQL structureif(mysql_i nit(&mysql)=NULL) /2fprin tf(stderr,"Error in mysql_ in it!n");exit(-1); /2/2/conn ect to DBif(!mysql_real_co nn ect(&mysql,"localhost",&quo
31、t;root",0,"sp",0,NULL,0) fprintf(stderr,"Error in connection: %s %dn", mysql_err or(&m ysql),mysql_err no(&m ysql);mysql_close(&m ysql);err_code=-2;goto mysql_err; /2if(sp=getservb yn ame(service,"tcp")=NULL)/2fprin tf(stderr,"Error: getservb yn am
32、e");exit(-5); /2if(s=socket(AF_INET,SOCK_STREAM,0)=-1) /2fprin tf(stderr,"Error: socket create");exit(-6);2bzer o(&sin, sizeof(s in);sin.sin _port=sp->s_port;if(bi nd(s, &si n,sizeof(s in )=-1)2fprin tf(stderr,"Error: bi nd");close(s); exit(-6);2if(liste n(s,5)=-1
33、)2fprin tf(stderr,"Error: liste n");close(s); exit(-6);2while(1)2 whilefprin tf(stderr,"ntttNow wait connect .n");if(n s=accept(s,0,0)=-1) / wait a connection 3fprin tf(stderr,"error: accept"); continue;/3err_code=0;2. 進(jìn)程的使用,創(chuàng)建子進(jìn)程來處理客戶機(jī)所發(fā)來的信息:if(pid=fork()=-1) /conn ete
34、d, and the n create child proc/3fprin tf(stderr,"server: fork error!");close(s); exit(-1);if(pid!=O)/pare nt proce nothing to do, and to the n ext loop/3 close( ns);wait(O);con ti nue;/3if(pid=0) / en tered child proccedure /3 pid=0close(s);printf("Receive a client connect:%sn",a
35、rgv1);if(rd_l=read( ns,buff,500)=0) /4fprin tf(stderr,"Read nothing from socket: nsn");close( ns); exit(-3);/4prin tf("%s get message from ns:%sn ”,argvO,buff);buffrd_l='0'strcpy(tmp,buff);strcat(tmp,"|OKOK|");rd+=4;3. 運(yùn)用unix_Socket實現(xiàn)所要完成的功能strsplit(buff,v,d);switch(
36、v00) /4 switchcase '1':/ query();spri ntf(cmd,"SELECT * FROM sp WHERE spn ame='%s'",v1);/execute queryprin tf("nCMD=%sn",cmd);if(mysql_query (&m ysql,cmd)!=O)5fprin tf(stderr,"Error in query: %s %dn", mysql_err or(&m ysql),mysql_err no(&m ysq
37、l);/mysql_close(&m ysql);err_code=-3;goto mysql_err;55/get resultif(result=mysql_store_result (&m ysql)=NULL)fprin tf(stderr,"Error in store_result: %s %dn", mysql_err or(&m ysql),mysql_err no(&m ysql);mysql_free_result(result);/mysql_close(&m ysql);err_code=-4;goto mys
38、ql_err;5mysql_err:spri ntf(buff,"%2.2d|",err_code);if(err_code!=0) goto mysql_err1;recs=mysql_ num _rows(result);flds=mysql_ nu m_fields(result);for(i=0;i<recs;i+)5/process result setif(recs=0) sprintf(cmd,"00|"); elsespri ntf(cmd,"%2.2d|",recs); strcat(buff,cmd);row
39、=mysql_fetch_row(result);/ pay=atof(v2)+atof(row2);/prin tf("%f",&row2);/prin tf("n");for( j=O;j<flds;j+)6spri ntf(cmd,"%s|",rowj); strcat(buff,cmd);/6printf("nBUFF form DB=%sn",buff);mysql_free_result(result);mysql_err1:mysql_close(&m ysql);break;c
40、ase 2:/tran s();wherespri ntf(cmd,"UPDATEsp SET spnu =sp nu-'%s'sp name=%s”',v2,v1);/execute queryprin tf("nCMD=%sn ”,cmd);if(mysql_query (&m ysql,cmd)!=O)5fprin tf(stderr,"Error in query: %s %dn",mysql_err or(&m ysql),mysql_err no(&m ysql);/ mysql_close(&
41、amp;m ysql);err_code=-3;goto mysql_err;/ spri ntf(tt,);sprintf(cmd,"UPDATE payment SET transtime='%s'where sp_id='%s'", v3, v1);/execute queryprin tf("nCMD=%sn",cmd);if(mysql_query (&m ysql,cmd)!=0)/5fprin tf(stderr,"Error in query: %s %dn",mysql_err
42、 or(&m ysql),mysql_err no(&m ysql);/ mysql_close(&m ysql);err_code=-3;goto mysql_err;/* spri ntf(cmd,"UPDATE main SET curr_j n1='%d'whereun it_id='%s"',v5,v6);/execute queryprin tf("nCMD=%sn ”,cmd);if(mysql_query (&m ysql,cmd)!=0)5fprin tf(stderr,"
43、Error in query: %s %dn",mysql_err or(&m ysql),mysql_err no(&m ysql);/mysql_close(&m ysql);err_code=-3;goto mysql_err;*/*sprintf(cmd,"SELECT * FROM main");/execute queryif(mysql_query (&m ysql,cmd)!=0)/5fprin tf(stderr,"Error in query: %s %dn",mysql_err or(&am
44、p;m ysql),mysql_err no(&m ysql);/mysql_close(&m ysql);err_code=-3;goto mysql_err;55/get resultif(result=mysql_store_result (&m ysql)=NULL)fprin tf(stderr,"Error in store_result: %s %dn", mysql_err or(&m ysql),mysql_err no(&m ysql);mysql_free_result(result);/mysql_close(
45、&m ysql);err_code=-4;goto mysql_err;5mysql_err:if(err_code!=0)mysql_close(&m ysql); exit(-1);/ spri ntf(buff,"1|");recs=mysql_ num _rows(result);flds=mysql_ nu m_fields(result);if(recs=0) fprin tf(stderr,"No Data in Table UNIT");goto mysql_err2;k=atoi(row3) + 1;wherespri
46、ntf(cmd,"UPDATEmainsetcurr_j nl='%d'un it_id=%s"',i,row0);if(mysql_query (&m ysql,cmd)!=0)5fprin tf(stderr,"Error in query: %s %dn",mysql_err or(&m ysql),mysql_err no(&m ysql);/mysql_close(&m ysql);err_code=-3;goto mysql_err;5/get resultif(result=mysql
47、_store_result (&mysql)=NULL)5fprin tf(stderr,"Error in store_result: %s %dn",mysql_err or(&m ysql),mysql_err no(&m ysql);mysql_free_result(result);/mysql_close(&m ysql);err_code=-4;goto mysql_err;*/spri ntf(cmd,"SELECT * FROM sp WHERE spn ame='%s”',v1);/execute
48、 queryprin tf("nCMD=%sn ”,cmd);if(mysql_query (&m ysql,cmd)!=0)5fprin tf(stderr,"Error in query: %s %dn",mysql_err or(&m ysql),mysql_err no(&m ysql);/mysql_close(&m ysql);err_code=-3;goto mysql_err;5/get resultif(result=mysql_store_result (&mysql)=NULL)/5fprin tf(s
49、tderr,"Error in store_result: %s %dn",mysql_err or(&m ysql),mysql_err no(&m ysql);mysql_free_result(result);/mysql_close(&m ysql);err_code=-4;goto mysql_err;/5spri ntf(buff,"%2.2d|",err_code);recs=mysql_ num _rows(result); flds=mysql_ nu m_fields(result);/process resu
50、lt setspri ntf(cmd,"%2.2d|",recs);strcat(buff,cmd); row=mysql_fetch_row(result);/ pay=atof(v2)+atof(row2);/prin tf("%f",&row2);/prin tf("n");for( j=O;j<flds;j+)6spri ntf(cmd,"%s|",rowj); strcat(buff,cmd);6printf("nBUFF form DB=%sn",buff);mysql
51、_free_result(result);/nothi ng(buff);break;case 3:/prin t();nothin g(buff);break;default:fprintf(stderr,"Func. code error in:n%s",buff);4 switchwr_l=strle n(buff);if(wr_l=write( ns,buff,wr_l)!=wr_l)4fprin tf(stderr,"Write socket ns error!n");close( ns); exit(-4);4strncat(tmp,buff
52、,wr_l);wr_l+=rd_l;buffwr_l='n'+wr_l;if(flds=ope n(log,O_WRONLY|O_APPEND)=-1)fprintf(stderr,"File %s open error!n",log);exit(-5);if(write(flds,tmp,wr_l)!=wr_l)fprin tf(stderr,"File %s write error!n",l og);close(flds);exit(-6);close(flds);close( ns); exit(0);3 switch2 while1 mai nvoid strsplit(char *s,char *v,char d)int i,j,l;j=O;v j=s;l=strle n(s);for(i=0;i<l;i+)if(*(s+i)!='|') continue;else *(s+i)='0:v+j=s+i+1;/ prin tf("=%dt",j);/for(i=0;vi!=NULL;i+) fprintf(stderr,"%d:%sn",i,vi);nothin g(char *x)sprintf(x,"OO|&q
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版?zhèn)€體廂貨車出租及車輛監(jiān)控系統(tǒng)合同3篇
- 2025版土地居間業(yè)務(wù)規(guī)范化合同書(2025版)6篇
- 2025版建筑塑料材料買賣合同范本解讀3篇
- 《手機(jī)送分析》課件
- 【中學(xué)課件】香港和澳門
- 二零二五版汽車銷售退換貨處理合同模板2篇
- 二零二五版智慧城市建設(shè)項目工程勘察設(shè)計勞務(wù)分包合同3篇
- 家用紡織品的消費(fèi)趨勢與市場需求預(yù)測考核試卷
- 《波爾多液配制》課件
- 2025版事業(yè)單位聘用合同起草與審查要點3篇
- 2024-2025學(xué)年山東省濰坊市高一上冊1月期末考試數(shù)學(xué)檢測試題(附解析)
- 數(shù)學(xué)-湖南省新高考教學(xué)教研聯(lián)盟(長郡二十校聯(lián)盟)2024-2025學(xué)年2025屆高三上學(xué)期第一次預(yù)熱演練試題和答案
- 決勝中層:中層管理者的九項修煉-記錄
- 幼兒園人民幣啟蒙教育方案
- 高考介詞練習(xí)(附答案)
- 單位就業(yè)人員登記表
- 衛(wèi)生監(jiān)督協(xié)管-醫(yī)療機(jī)構(gòu)監(jiān)督
- 記錄片21世紀(jì)禁愛指南
- 腰椎間盤的診斷證明書
- 移動商務(wù)內(nèi)容運(yùn)營(吳洪貴)任務(wù)七 裂變傳播
- 單級倒立擺系統(tǒng)建模與控制器設(shè)計
評論
0/150
提交評論