![Linux下類(lèi)似QQ聊天工具_(dá)第1頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/21/50a3b0d7-3b01-4f2c-b9f9-f5f2cefb993d/50a3b0d7-3b01-4f2c-b9f9-f5f2cefb993d1.gif)
![Linux下類(lèi)似QQ聊天工具_(dá)第2頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/21/50a3b0d7-3b01-4f2c-b9f9-f5f2cefb993d/50a3b0d7-3b01-4f2c-b9f9-f5f2cefb993d2.gif)
![Linux下類(lèi)似QQ聊天工具_(dá)第3頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/21/50a3b0d7-3b01-4f2c-b9f9-f5f2cefb993d/50a3b0d7-3b01-4f2c-b9f9-f5f2cefb993d3.gif)
![Linux下類(lèi)似QQ聊天工具_(dá)第4頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/21/50a3b0d7-3b01-4f2c-b9f9-f5f2cefb993d/50a3b0d7-3b01-4f2c-b9f9-f5f2cefb993d4.gif)
![Linux下類(lèi)似QQ聊天工具_(dá)第5頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/21/50a3b0d7-3b01-4f2c-b9f9-f5f2cefb993d/50a3b0d7-3b01-4f2c-b9f9-f5f2cefb993d5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、概述AbstractLinux作為免費(fèi)開(kāi)源操作系統(tǒng)廣泛應(yīng)用于企業(yè)。Linux與UNIX有著深厚的淵源,而UNIX系統(tǒng)可謂“堅(jiān)如磐石”,其穩(wěn)定性受到廣泛贊譽(yù)。近年來(lái),越來(lái)越多的就業(yè)崗位被提供給了Linux開(kāi)發(fā)人員。IM即時(shí)通訊軟件是近年來(lái)流行的通信方式,企業(yè)、個(gè)人等都在更多地使用IM進(jìn)行溝通。通過(guò)計(jì)算機(jī)網(wǎng)絡(luò),信息的傳遞變得十分方便。并非所有IM軟件都要想騰訊QQ那樣復(fù)雜、龐大,作為內(nèi)部溝通,只需功能齊全、操作方便即可。作為課程設(shè)計(jì)作品,在Linux下開(kāi)發(fā)C/S式IM軟件,對(duì)于熟悉Linux、復(fù)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)、進(jìn)一步學(xué)習(xí)軟件開(kāi)發(fā)都有十分積極的意義。As is open source software
2、, Linux has been widely used in corporations. These years, more and more jobs are offered to Linux developers, for Linux spoken highly of for its stability as UNIX. IM software has become the most widely used communication software both for business use and for personal use. Through internetworks -
3、including the Internet, Enterprise LAN, VPNs - information can be exchanged more conveniently and immediately. However, not all IM of C/S model is that complex as Tencent QQ. IM software inside an Enterprise LAN should be lighter and easier. As a product design of Linux, developing an IM software is
4、 helpful to reviewing key points of Linux, Internet, and software developing. 歡迎下載目 錄第1章 設(shè)計(jì)任務(wù)1.1. 設(shè)計(jì)任務(wù)概述1.1.1. 課題名稱Linux下的IM網(wǎng)絡(luò)聊天軟件1.1.2. 內(nèi)容摘要隨著嵌入式在生活中的應(yīng)用越來(lái)越廣泛,嵌入式LINUX下的Socket網(wǎng)絡(luò)編程也越來(lái)越熱。為了加強(qiáng)對(duì)在Linux系統(tǒng)下進(jìn)行編程的學(xué)習(xí)和實(shí)踐,運(yùn)用計(jì)算機(jī)網(wǎng)絡(luò)、軟件工程等知識(shí),我們選擇了Linux下網(wǎng)絡(luò)聊天工具作為課設(shè)題目。本系統(tǒng)主要功能在于實(shí)現(xiàn)多個(gè)客戶端一與服務(wù)器端之問(wèn)的信息傳遞與文件傳輸功能。系統(tǒng)主要實(shí)現(xiàn)4人聊天室功能
5、:注冊(cè)與登錄系統(tǒng),公聊,私聊,文件傳輸。應(yīng)用LINUX下的Socket網(wǎng)絡(luò)編程并使用TCP實(shí)現(xiàn)簡(jiǎn)單聊天程序。編程過(guò)程中不斷用各種網(wǎng)絡(luò)調(diào)試工具進(jìn)行調(diào)試程序,最終做成了簡(jiǎn)單的在Linux下的聊天工具。關(guān)鍵詞:Linux Socket IM軟件1.2. 開(kāi)發(fā)環(huán)境1.2.1. 硬件環(huán)境Intel x86 CPU架構(gòu)(主頻1G Hz以上)512MB DDR2內(nèi)存支持800*600以上分辨率、16色以上的顯示設(shè)備1.2.2. 軟件環(huán)境Red Hat Enterprise Linux(或Fedora)VIM編譯器1.3. 要求在Linux下實(shí)現(xiàn)網(wǎng)絡(luò)聊天,包括公聊、一對(duì)多私聊等功能。實(shí)現(xiàn)客戶端之間經(jīng)網(wǎng)絡(luò)傳輸文
6、件。能保存聊天記錄。第2章 設(shè)計(jì)方案2.1. 系統(tǒng)結(jié)構(gòu)2.1.1. 結(jié)構(gòu)結(jié)構(gòu)組成:注冊(cè)、登錄、聊天、文件傳輸。2.1.2. 結(jié)構(gòu)圖聊天系統(tǒng)分為五大模塊2.2. 流程與模塊2.2.1. 執(zhí)行流程2.2.2. 各功能需要調(diào)用的模塊模塊需求注冊(cè)登錄聊天文件傳輸用戶注冊(cè)用戶登錄系統(tǒng)廣播上下線提示用戶私聊文件傳輸強(qiáng)制下線第3章 實(shí)現(xiàn)原理3.1. 注冊(cè)、登錄模塊3.1.1. 服務(wù)器端服務(wù)器端建立好socket,等待連接,當(dāng)有客戶端連接服務(wù)器的時(shí)候,服務(wù)器接收連接,并接受客戶端發(fā)送過(guò)來(lái)的消息,恨據(jù)接收到的結(jié)構(gòu)體所攜帶的協(xié)議來(lái)做相應(yīng)的功能:服務(wù)器端啟動(dòng)后如圖 31所示。圖 31l、注冊(cè):如果協(xié)議為reg,則為
7、客戶端注冊(cè),首先將發(fā)送過(guò)來(lái)的結(jié)構(gòu)體,提取用戶名和密碼,然后需要對(duì)川戶名合法性檢驗(yàn),驗(yàn)證之后如果用戶名合法則將川戶信已保存到文件中,合法性的規(guī)則包括川戶名不能重復(fù)和不能使用all等協(xié)議作為川戶名,并且川戶名和密碼都不能為空。如果注冊(cè)成功,服務(wù)器端發(fā)送一個(gè)消息給注冊(cè)的客戶端,同樣將消息保存在一個(gè)結(jié)構(gòu)休里如果失敗,也給客戶端發(fā)送一個(gè)消息如“您榆入的用戶名小能為akk”或者“用戶名XX已經(jīng)存在”。注冊(cè)結(jié)果如圖 32所示。圖 322、登錄:如果協(xié)議為login,則將用戶名和密碼信息提取,再遍歷存放用戶信息文件里的用戶名和密碼直到驗(yàn)證成功為止,如果驗(yàn)證成功則對(duì)所有在線的川戶發(fā)送一條消息:“提示XX用戶登錄
8、成功”;如果失敗則只給登陽(yáng)失敗的客戶端提示登錄失敗,并給出原囚,如“用戶名不存在”或者“用戶名或者密碼輸入錯(cuò)誤”,并跳轉(zhuǎn)到相應(yīng)的代碼執(zhí)行其他功能,成功則等特發(fā)送客戶端消息,失敗則關(guān)閉Socket并結(jié)束線程,如圖 33所示:圖 333、監(jiān)聽(tīng)和踢出客戶端:通過(guò)六行和修改綁定的Socket和在線用戶隊(duì)列實(shí)現(xiàn)查看和踢出在線用戶,踢出用戶后向被踢出用戶發(fā)送相關(guān)信息,如圖 34、圖 35所示。圖 34圖 353.1.2. 客戶端客戶端的輸入和消息的顯示要使用2個(gè)終端,一個(gè)是Client,一個(gè)是Display。Client終端為輸入的界面。在這個(gè)界面里,新建一個(gè)線程來(lái)接受服務(wù)器端發(fā)來(lái)的消息,再添加時(shí)間信息,
9、并將這些信息寫(xiě)入文件,然后給Display進(jìn)程發(fā)送一個(gè)消息,Display進(jìn)程接到消息,就去讀取文件并將這些數(shù)擬顯示在Display終端。打開(kāi)客戶端Display終端界而,用lseek將內(nèi)部指t陣行向文件末尾,等待Client終端里的線秤將消息寫(xiě)入文件。一旦有消息過(guò)來(lái)就去文件里讀取數(shù)據(jù)井打印在Display終端。打開(kāi)客戶端Client終端界而,有3個(gè)菜單,包括注冊(cè)、登錄、退出。選擇相應(yīng)項(xiàng)即可進(jìn)幻相關(guān)操作,注冊(cè)和登錄如圖 32、圖 33所示。3.1.3. 協(xié)議服務(wù)器端和客戶端之間互相通信需要使用的協(xié)議:l、all$msg為給所有人發(fā)送消息。2、直接輸入view$獲得在線用戶列表。3、user$m
10、sg給用戶名為user的用戶發(fā)送私聊消息。4、trans$user$filenam將文件傳輸給who。5、reg為注冊(cè)。6、login為登錄。3.2. 聊天模塊3.2.1. 客戶端客戶端在登陸成功之后在發(fā)送消息之前可以先查看在線用戶列表,查看用戶列表使用view$,如所示。圖 36接著,可以使用user$msg的形式發(fā)送信息,這個(gè)消息是發(fā)送給user的?;蛘?,先使用user$來(lái)切換到發(fā)送消息,這個(gè)時(shí)候,你不需要加上協(xié)議,即可給user這個(gè)用戶發(fā)送消息,如圖 37、圖 38所示。圖 37圖 38當(dāng)然,上述方法也可以實(shí)現(xiàn)一對(duì)多聊天。如所示。圖 39這些消息都加上協(xié)議user$msg來(lái)封裝成結(jié)構(gòu)體,
11、再發(fā)送給服務(wù)器端。3.2.2. 服務(wù)器端如果是私聊,則根據(jù)客戶端要發(fā)送到哪個(gè)用戶,到鏈表里取得該用戶名的客戶端信息,服務(wù)器再發(fā)送給相應(yīng)的接收信息的客戶端,接收信息的客戶終端就會(huì)光將信息保存到聊天記錄的文件里,并顯示收到的信息,并且信息前面會(huì)顯示相應(yīng)的提示符。3.3. 文件傳輸模塊3.3.1. 客戶端如果某個(gè)客戶端想發(fā)送文件給其他客戶端,則直接使用命令trans$user$filename。trans為協(xié)議,user為用戶名,filename包括本地的路徑和文件名。如圖 310、圖 311所示。圖 310圖 3113.3.2. 服務(wù)器端當(dāng)發(fā)送到服務(wù)器的時(shí)候,根據(jù)協(xié)議,先給接收的客戶端發(fā)送一條消息
12、為trans標(biāo)記:某某用戶給您發(fā)送了XX文件,Y接收N拒絕接收。如果客戶端按下N,則返回一條消息給服務(wù)器端,服務(wù)器端同時(shí)告訴發(fā)送的客戶端對(duì)方拒絕接收文件。發(fā)送端可以繼續(xù)做其他的事。如果接收的客戶端按下Y,并立即按受保存的路徑和文件名。輸入完后就可以接收文件了??蛻舳朔祷匾粭l消息給無(wú)誤器端,服務(wù)器端同時(shí)返回一條消息給發(fā)送的客戶端,告訴客戶端對(duì)方同意接收文件,這時(shí)候文件開(kāi)始傳輸;發(fā)送完畢后,發(fā)送的客戶端會(huì)顯示傳輸完畢。傳輸?shù)奈募梢允谷我獾奈膫儭2粌H僅是文本,多媒體文件也可以。第4章 實(shí)現(xiàn)本設(shè)計(jì)由C語(yǔ)言實(shí)現(xiàn),用VIM編譯。歡迎下載/*check.h*/#include #include #incl
13、ude #include #include #include #include #include #include #include #define MAXLEN 1024struct message char flag15; char name10; int size; char msgMAXLEN;int reg_check(struct message *recievemsg);int login_check(struct message *recievemsg);/*check.c*/#include check.hint reg_check(struct message *recie
14、vemsg) int fd; int read_size,write_size; struct message cmpmsg; if(strlen(recievemsg-name)10 |strlen(recievemsg-msg)20 ) return 1; if(strcmp(recievemsg-name,all)=0) return -1; if(strcmp(recievemsg-name,reg)=0) return -1; if(strcmp(recievemsg-name,login)=0) return -1; if(strcmp(recievemsg-name,trans)
15、=0) return -1; if(fd=open(user.txt,O_RDWR|O_CREAT|O_A,PPEND,0666)0) perror(open); printf(openn); return -2; do if(read_size=read(fd,&cmpmsg,sizeof(cmpmsg)name,)=0) close(fd); return -1; while(read_size = sizeof(struct message); if(write_size=write(fd,recievemsg,sizeof(struct message)0) pe
16、rror(write); close(fd); return -2; while(write_size!=sizeof(struct message) /write_size = 0-writesize; lseek(fd,-write_size,SEEK_CUR); write_size=write(fd,recievemsg,sizeof(struct message); printf(write file successn); close(fd); return 0;int login_check(struct message *recievemsg) int fd; struct me
17、ssage cmpmsg; int read_size; if(fd=open(user.txt,O_RDONLY)0) perror(open); return -2; do if(read_size=read(fd,&cmpmsg,sizeof(struct message)name,)=0)&(strcmp(recievemsg-msg,cmpmsg.msg)=0) close(fd); return 0; while(read_size0); close(fd); return -1;/*void main()struct message sendmsg;prin
18、tf(input name:n);gets();printf(input mima:n);gets(sendmsg.msg); printf(%dn,reg_check(&sendmsg); /printf(%dn,login_check(&sendmsg); */*client.c*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAXLEN 102
19、4struct message char flag15; char name10; int size; char msgMAXLEN;struct msq long msg_type; char msg_text5;int qid = -1,fd = -1,sockfd,savefilefd=-1;char filefromname10;void handleQuit(int signal_no) if(fd 0) close(fd); close(sockfd); if(qid 0) if(msgctl(qid,IPC_RMID,NULL)0) printf(消息隊(duì)列無(wú)法關(guān)閉n); exit
20、(1); close(savefilefd); printf(程序正常退出n); raise(SIGQUIT);void cutStr(char str,char left, int n, char right,int m, char c) int i,k,j; for(i = 0 ; i n ;i+) if(stri = c) break; if(i = n) i = -1; else memset(left,0,strlen(left); for(k = 0 ; k i ; k+) leftk = strk; for(j = i+1 ; j m;j+) if(strj = 0) break
21、; rightj-i-1 = strj; lefti = 0; if(j 0) printf(filedata.msg= %sn,filedata.msg); send(sockfd,&filedata,sizeof(structmessage),0); else printf(讀取文件失敗,文件傳輸中止n); break; while (filedata.size 0); close(savefilefd); savefilefd = -1 ;void handlerecvmsg(int *sockfd) int connfd = *sockfd; int nread; char buf10
22、24; char str1024; struct message recvmsg; time_t timep; struct msq msg; if( fd =open(chatlog.txt,O_RDWR|O_CREAT|O_APPEND) 0) printf(打開(kāi)聊天記錄文件失敗!); exit(1); / printf(%dn,fd); if(qid = msgget(2222,IPC_CREAT|0666) = -1) printf(創(chuàng)建消息隊(duì)列失敗n); exit(1); msg.msg_type = getpid(); strcpy(msg.msg_text,OK); while(
23、1) nread = recv(connfd,&recvmsg,sizeof(struct message),0); if(nread = 0) printf(與服務(wù)器斷開(kāi)了連接n); close(fd); close(connfd); exit(0); else if (strcmp(recvmsg.flag,all) = 0) time (&timep); sprintf(str,%s%s發(fā)給所有人:%snn,ctime(&timep),,recvmsg.msg); else if (strcmp(recvmsg.flag,sermsg) = 0) time (&t
24、imep); printf(%s服務(wù)器發(fā)給所有人:%snn,ctime(&timep),recvmsg.msg); continue; else if (strcmp(recvmsg.flag,view) = 0) time (&timep); printf(%s當(dāng)前在線客戶端:n%snn,ctime(&timep),recvmsg.msg); continue; else if (strcmp(recvmsg.flag,trans) = 0) pthread_t pid; if (strcmp(recvmsg.msg,agree) = 0) strcpy(filefromname,recvm
25、); /創(chuàng)建線程發(fā)送文件 pthread_create(&pid,NULL,(void *)handlesendfile,NULL); else if(strcmp(recvmsg.msg,disagree) = 0) printf(對(duì)方拒絕接收文件n); close(savefilefd); savefilefd = -1; else if(strcmp(recvmsg.msg,noexist) = 0) printf(該客戶端不存在n); close(savefilefd); savefilefd = -1; else strcpy(filefromname,recvmsg.
26、name); printf(%s向你請(qǐng)求傳名為%s文件,是否同意接受?agree(同意)|disagree(不同意)n,,recvmsg.msg); savefilefd = 0; continue; else if(strcmp(recvmsg.flag,transf) = 0) int n; if(strcmp(recvmsg.msg,end$) = 0) printf(文件傳輸結(jié)束n); close(savefilefd); savefilefd = -1; continue; else n=write(savefilefd,recvmsg.msg,recvmsg
27、.size); / printf(recvmsg.msg = %sn,recvmsg.msg); while(n 0) lseek(savefilefd,n,SEEK_CUR); n=write(savefilefd,recvmsg.msg,recvmsg.size); continue; else time (&timep); sprintf(str,%s%s發(fā)來(lái)的私聊消息:%snn,ctime(&timep),,recvmsg.msg); write(fd,str,strlen(str); msgsnd(qid,&msg,sizeof(struct msq),0);
28、 int main(int argc,char *argv) struct sockaddr_in server_addr; int port; int do_number; struct message a; char strMAXLEN; char bufMAXLEN; pthread_t pid; if(argc != 3) printf(請(qǐng)輸入服務(wù)器IP和端口n); exit(1); port = atoi(argv2); if(sockfd =socket(AF_INET,SOCK_STREAM,0) = -1) printf(創(chuàng)建socket失敗n); exit(1); signa
29、l(SIGINT,handleQuit); printf(-n); printf(|n); printf(| input a number to work |n); printf(|t1.loginttt |n); printf(|t2.registertt |n); printf(|t3.exitttt |n); printf(|n); printf(-n); scanf(%d,&do_number); gets(str); while(do_number != 1 & do_number != 2 &do_number != 3) printf(你輸入的不是上面的選項(xiàng),請(qǐng)重新輸入:n);
30、scanf(%d,&do_number); gets(str); if(do_number=3) close(sockfd); printf(程序已退出!n); exit(0); bzero(&server_addr,sizeof(struct sockaddr_in); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(argv1); server_addr.sin_port = htons(port); if(connect(sockfd,(struct sockaddr*)&server_a
31、ddr,sizeof(struct sockaddr) = -1) printf(與服務(wù)器無(wú)響應(yīng),請(qǐng)隔一段時(shí)間再連接n); exit(2); if(do_number =1) int n = 3; while(n) printf(請(qǐng)輸入你的用戶名:n); scanf(%s,); printf(請(qǐng)輸入密碼:n); scanf(%s,a.msg); strcpy(a.flag,login); /a.flag3 = 0; send(sockfd,&a,sizeof(a),0); printf(正在等待服務(wù)器應(yīng)答.n); recv(sockfd,buf,MAXLEN,0); printf(
32、接到服務(wù)器發(fā)來(lái)的信息:%sn,buf); if(strcmp(buf,登錄成功!) = 0) /int i,j,k; pthread_create(&pid,NULL,(void*)handlerecvmsg,(void *)&sockfd); gets(str); strcpy(a.flag,all); while(1) memset(a.msg,0,strlen(a.msg); memset(str,0,strlen(str); gets(str); strcpy(buf,a.flag); cutStr(str,a.flag,15,a.msg,MAXLEN,$); printf(標(biāo)志信息為
33、:%sn,a.flag); if(strcmp(a.flag,view) = 0) send(sockfd,&a,sizeof(a),0); strcpy(a.flag,buf); continue; else if (strcmp(a.flag,trans) = 0) & (savefilefd =0) / printf(f=%s,a=%s,s=%d,a.flag,a.msg,savefilefd); if (strcmp(a.msg,agree) = 0) & (savefilefd = 0) charsavefilename20; /charsavefileallname22; prin
34、tf(請(qǐng)輸入保存的文件名,文件將保存在當(dāng)前目錄下!n); do gets(savefilename); savefilefd = open(savefilename,O_RDWR|O_CREAT|O_EXCL,0666); if(savefilefd = -1) printf(文件名可能存在請(qǐng)重新命名.n); while(savefilefd = -1); if(savefilefd 0) printf(創(chuàng)建文件失?。); savefilefd = -1; else strcpy(,filefromname); send(sockfd,&a,sizeof(a),0); / pri
35、ntf(agree :%s,%s,%sn,a.flag,,a.msg); else memset(,0,strlen(); memset(str,0,strlen(str); cutStr(a.msg,,10,str,MAXLEN,$); if (str0 != 0 & 0 != 0) chartransfileallname22; sprintf(transfileallname,./%s,str); savefilefd = open(str,O_RDWR,0666); if(savefilefd 0) printf(打開(kāi)文件失敗
36、!n); savefilefd = -1; else memset(a.msg,0,strlen(a.msg); strcpy(a.msg,str); send(sockfd,&a,sizeof(a),0); /printf(tansmit :%s,%s,%s,a.flag,,a.msg); else strcpy(a.msg,disagree); strcpy(,filefromname); send(sockfd,&a,sizeof(a),0); / printf(disagree :%s,%s,%s,a.flag,,a.msg); strcpy(a.f
37、lag,buf); continue; if (strcmp(a.flag,trans) = 0) strcpy(a.flag,buf); send(sockfd,&a,sizeof(a),0); else n-; printf(您還有%d次機(jī)會(huì),之后將推出程序!n,n); close(sockfd); exit(3); /登陸 else if(do_number =2) /register int i =1 ; char username10; char password20; char password_t20; char temp20; printf(請(qǐng)輸入你的用戶名:n); scanf
38、(%s,username); while(i) printf(請(qǐng)輸入密碼:n); scanf(%s,password); printf(youpass : %sn,password); printf(請(qǐng)?jiān)俅屋斎朊艽a:n); scanf(%s,password_t); printf(passyou : %sn,password_t); if(strcmp(password,password_t) != 0) printf(輸入的密碼不一樣n); i = 1; else i = 0; strcpy(,username); strcpy(a.msg,password); strcpy(a
39、.flag,reg); /a.flag3 = 0; send(sockfd,&a,sizeof(a),0); printf(正在等待服務(wù)器應(yīng)答.n); recv(sockfd,buf,MAXLEN,0); printf(接到服務(wù)器發(fā)來(lái)的信息:%sn,buf); close(sockfd); return 0; /*display.c*/ #include #include #include #include #include #include #include #include #include int qid,fd;struct msq long msg_type; char msg_tex
40、t5;void handlequit(int sign_no) close(fd); if(msgctl(qid,IPC_RMID,NULL) 0) printf(消息隊(duì)列無(wú)法關(guān)閉n); exit(1); printf(程序正常退出n); raise(SIGQUIT);int main() char buf1024; int n; struct msq msg; fd = open(chatlog.txt,O_RDONLY|O_CREAT); signal(SIGINT,handlequit); if(fd0) printf(打開(kāi)文件失敗n); return -1; lseek(fd,0,SE
41、EK_END); if(qid = msgget(2222,IPC_CREAT|0666) = -1) printf(創(chuàng)建消息隊(duì)列失敗n); close(fd); return -1; while(1) if(msgrcv(qid,&msg,sizeof(msg),0,0) next = NULL; return L;void deletelist(LinkList L ,datatype e) int i=0; LinkList s,p; p = L; while ( (strcmp(,) != 0) & p-next != NULL) s=p; p = p
42、-next; if (p-next = NULL &(strcmp(,) != 0) return; else s-next = p-next; free(p); void insertend(LinkList L,datatype e) int i=0; LinkList s,p; p = L; while(p-next != NULL) p = p-next; i+; s = (LinkList)malloc(sizeof(LNode); s-data =e; s-next = p-next ; p-next =s;void DisplayList(LinkList L) L=L-next; int i = 1; while (L != NULL) printf(%d. %s n,i,L-); L = L-next; i+; /*void main()LinkList L;datatype res=0;L=CreateLinkList(); printf(aaaaan); DisplayList(L); printf(aaaaan); printf(n); insertend(L,500); pr
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國(guó)PWM制氫電源行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 必殺03 第六單元 我們生活的大洲-亞洲(綜合題20題)(解析版)
- 講稿《教育強(qiáng)國(guó)建設(shè)規(guī)劃綱要(2024-2035年)》學(xué)習(xí)宣講
- 2025關(guān)于合同中的表見(jiàn)代理
- 商業(yè)物業(yè)租賃合同范本
- 試驗(yàn)檢測(cè)未來(lái)的發(fā)展方向
- 天然氣購(gòu)銷(xiāo)合同模板
- 2025機(jī)械加工合同
- 卷簾門(mén)電機(jī)售后合同范本
- 商鋪的買(mǎi)賣(mài)合同年
- 9.2溶解度(第1課時(shí)飽和溶液不飽和溶液)+教學(xué)設(shè)計(jì)-2024-2025學(xué)年九年級(jí)化學(xué)人教版(2024)下冊(cè)
- 2024年審計(jì)局公務(wù)員招錄事業(yè)單位招聘考試招錄139人完整版附答案【研優(yōu)卷】
- 濰坊市人民醫(yī)院招聘真題
- 銷(xiāo)售人員薪資提成及獎(jiǎng)勵(lì)制度
- 2017年江蘇南京中考滿分作文《無(wú)情歲月有味詩(shī)》5
- 2023年宏觀經(jīng)濟(jì)學(xué)考點(diǎn)難點(diǎn)
- 2024-2030年中國(guó)智慧水務(wù)行業(yè)應(yīng)用需求分析發(fā)展規(guī)劃研究報(bào)告
- 山體排險(xiǎn)合同模板
- 特殊感染手術(shù)的配合與術(shù)后處理課件
- 檢驗(yàn)科生物安全工作總結(jié)
- 即時(shí)通訊系統(tǒng)建設(shè)方案
評(píng)論
0/150
提交評(píng)論