linux下的消息管道的聊天程序实现项目_第1页
linux下的消息管道的聊天程序实现项目_第2页
linux下的消息管道的聊天程序实现项目_第3页
linux下的消息管道的聊天程序实现项目_第4页
linux下的消息管道的聊天程序实现项目_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在linux下使用管道来进行聊天的小程序1管道管道是一种最基本的IPC机制,由pipe函数创建:#include<unistd.h>intpipe(intfiledes[2]);调用pipe函数时在内核中开辟一块缓冲区(称为管道)用于通信,它有一个读端一个写端,然后通过filedes参数传出给用户程序两个文件描述符,filedes[0]指向管道的读端,filedes[1]指向管道的写端(很好记,就像0是标准输入1是标准输出一样)。所以管道在用户程序看起来就像一个打开的文件,通过read(filedes[0]);或者write(filedes[1]);向这个文件读写数据其实是在读写内核缓冲区。pipe函数调用成功返回0,调用失败返回-1。开辟了管道之后如何实现两个进程间的通信呢?比如可以按下面的步骤通信。1.父进程调用pipe开辟管道,得到两个文件描述符指向管道的两端。2.父进程调用fork创建子进程,那么子进程也有两个文件描述符指向同一管道。3.父进程关闭管道读端,子进程关闭管道写端。父进程可以往管道里写,子进程可以从管道里读,管道是用环形队列实现的,数据从写端流入从读端流出,这样就实现了进程间通信。例管道#include<stdlib.h>#include<unistd.h>俯#d将ef勤in株e呜MA瘦XL返IN奔E粘80慕in兔t岭ma饺in猜(v怪oi楚d)麦{次in暴t师n;状何in配t构fd煌[2必];宗pi悦d_绵t界pi牙d;钟ch喇ar寇l德in阁e[筒MA湾XL课IN载E]霸;点i萄f辣(p仰ip似e(铜fd挂)符<湖0)扯{奔p貌er挣ro狸r(季"p唉ip尾e"肾);稿e宿xi径t(险1)鞭;}饮I膛f皆((态pi美d横=碎fo既rk球()劝)属<槐0)辈{字p本er穿ro雷r(瓜"f跪or源k"妄);买e词xi膛t(爽1)玉;}咸if让(县pi绪d倡>较0)物{咬/*头p碗ar逝en锻t鉴*/国c炉lo达se题(f痛d[庭0]猾);贫琴wr若it狂e(决fd昨[1绿],置"伪he象ll搜o排wo愤rl授d\满n"鸦,尤12皂);抱w秀ai炉t(很NU鸣LL闪);伍}贫e赢ls亿e{酱/*阔c渠hi更ld恳*旷/岔cl绑os禁e(肉fd班[1头])隙;睁n山=橡r源ea欺d(摸fd示[0兴],院l红in山e,画M繁AX沸LI阵NE务);董穿wr滚it亦e(啦ST占DO翁UT督_F丹IL询EN香O,包l毒in球e,层n静);柳}摔r办et阻ur领n们0;}萄使用瞒管道迫有一烦些限丰制:吵两个御进程物通过恶一个个管道眨只能屡实现蛮单向嚷通信交,比号如上蜻面的国例子附,父肤进程俘写子间进程聪读,炭如果屡有时辨候也毫需要路子进嚼程写总父进顶程读值,就渔必须鸽另开嗽一个作管道挂。请雅读者播思考益,如旨果只教开一纲个管份道,勺但是疏父进芒程不爬关闭临读端漂,子翼进程匙也不露关闭事写端唇,双但方都醉有读营端和蒸写端匆,为粮什么警不能六实现腹双向肌通信哈?捆管道科的读扯写端沿通过借打开诞的文籍件描昼述符叶来传踢递,诉因此芽要通规信的华两个济进程纹必须将从它世们的辰公共梅祖先潜那里怖继承敌管道滥文件戏描述柔符。殿上面切的例羊子是娇父进喇程把撑文件谢描述捧符传齿给子根进程贞之后树父子嘴进程蜻之间裂通信恋,也趣可以秀父进芳程斯fo尊rk哪两次认,把脂文件撑描述纺符传吐给两滥个子慈进程赚,然申后两昆个子雷进程础之间雨通信厦,总米之需支要通拒过叛fo亏rk吊传递料文件套描述赛符使砖两个命进程斧都能毙访问碍同一枪管道菊,它利们才节能通屿信。富使用递管道借需要帜注意宇以下匀4普种特骡殊情谨况(掏假设丛都是袜阻塞洞I/阅O择操作捆,没犹有设挨置专O_垫NO忽NB将LO收CK户标志抓):惩1.齿瓶如果南所有蔽指向萍管道前写端剖的文葱件描苗述符仔都关赢闭了税(管榴道写通端的诱引用项计数塌等于念0挺),乳而仍砍然有圈进程廊从管誉道的愁读端误读数纸据,遵那么浩管道爪中剩株余的狱数据碍都被扩读取娃后,长再次疲re惊ad寒会返母回培0赏,就赛像读贴到文中件末皱尾一星样。仙2.钳辽如果子有指碧向管租道写哄端的朱文件我描述也符没辰关闭摸(管或道写巷端的半引用或计数鹊大于示0辫),团而持感有管星道写活端的落进程誉也没询有向旅管道咏中写丘数据甚,这慰时有塌进程棵从管拌道读愚端读铜数据适,那闻么管为道中麦剩余蛾的数适据都如被读慈取后药,再陪次忌re其ad芳会阻惯塞,再直到渗管道鼻中有炼数据捷可读僻了才押读取唉数据恰并返躺回。浴3.骆号如果相所有替指向束管道预读端冰的文汪件描慕述符卷都关勉闭了贫(管管道读谁端的鼠引用狮计数牙等于傻0端),寻这时醉有进笋程向馒管道霜的写届端缺wr网it朗e燥,那孝么该馆进程拿会收鸽到信罗号通SI插GP锦IP掏E碗,通案常会掩导致葛进程龙异常渐终止昆。泻4.军抢如果姻有指奸向管叫道读尼端的乱文件增描述著符没咸关闭栋(管栗道读迈端的袋引用膜计数略大于洽0础),脊而持曲有管沿道读请端的灵进程为也没缎有从炼管道悄中读侦数据畏,这钟时有睁进程陈向管其道写矛端写丧数据春,那山么在锯管道供被写浴满时辨再次脱wr钟it猾e查会阻筑塞,秆直到被管道嚷中有镇空位虎置了酸才写变入数剪据并迷返回剃。窜管道川的这徒四种咳特殊赖情况走具有仗普遍泽意义押2.脾管道送的聊炕天小僻程序辜1.卫李四湿端践#i县nc隔lu粗de篮<s倍td逃io灵.h转>魔#i盼nc甲lu侮de烟<s挺td诱li丝b.首h>舰#i灵nc累lu妙de把<s谊tr依in诱g.痕h>利#i瑞nc附lu乎de录<f脆cn酬tl竭.h方>废#i咸nc须lu踢de扑<s燕ys吴/s展el织ec载t.崇h>妈#i布nc绣lu炎de临<s务ys拍/t些yp垫es塞.h环>成#i荣nc梯lu满de遮<s纱ys掌/s对ta验t.截h>唤#i法nc附lu书de班<e粱rr乖no县.h跑>滔/*困李四蛛端*含/鸡/*饶作者缸:叶屿建敏驳*/谋/*涌QQ狮:2妄30旨81溪77徐42拆*/尺in百t窄ma某in怒(){郑i铺nt龙i魔,r自fd午,w祸fd某,l北en宵=0弯,f作d_山in锐;侧c夏ha诞r街st畜r[链12葬8]请;淹i摇nt食f稀la园g,鹊st劝di般nf医la羡g;粱树fd灿_s除et未w治ri钩te暑_f唐d,坚re鞭ad坛_f览d;元s庆tr绍uc殃t梨ti遍me铸va悼l赞ne攀t_讯ti的me冬r;呜m惭kf授if类o(茅"f秆if仗o1毛",具S_沾IW乔US及R|列S_届IR泻US殊R|啊S_我IR纯GR剃P|凳S_纤IR扮OT晒H)愈;奏m烦kf率if割o(起"f聋if森o2重",兼S_则IW谋US铅R|蓄S_迅IR微US福R|值S_幻IR怠GR渐P|逮S_溜IR乌OT屠H)滑;嫂r尚fd私=o搂pe议n(震"f战if蔽o1罗",基O_锐RD奔ON姐LY忠);溜w比fd控=o扮pe枝n(参"f科if扰o2余",它O_疫WR呼ON摄LY缎);俗i嫌f(彩rf蹄d<宫=0魄|钉|找wf规d<府=0牵)单re飞tu瓣rn捧0欠;志p斧ri留nt押f(抚"这隙是李瘦四粉端!证\n新")糖;工w唇hi个le魔(1酬){浊茶FD催_Z鼓ER谜O(召&r删ea话d_亡fd苹);肤饰FD抵_S旺ET膊(r根fd贴,&牢re耗ad础_f它d)疼;肢恋FD忍_S稼ET扶(f算il请en红o(拔st洁di吴n)丰,&贫re通ad点_f羽d)糊;竟代ne去t_脱ti汉me进r.郑tv那_s河ec仁=5报;季挂ne赔t_赤ti父me趣r.氧tv希_u流se甘c=床0;间机me穿ms醉et交(s若tr旺,0扇,s赵iz奏eo址f(弊st阅r)温);幻容if搁(i江=s删el骑ec巡t(摆rf撤d+普1,仙&r模ea身d_表fd府,N诵UL员L,岗NU剑LL疑,&规ne播t_败ti攀me素r)讲<=霜0)缴送叛co拦nt怠in婚ue犁;轮从if舅(F膝D_调IS轨SE慎T(火rf矩d,项&r壳ea蚁d_谜fd息))怜代{管增r肌ea蚊d(愁rf虚d,抗st爬r,榨si声ze业of岛(s轿tr执))付;吧馒p观ri背nt奋f(徐"-甜--债--简--坊--罢--躬--忌--蜓--查--鱼--碰--毒--胞--萍--治\n天")船;概呈p剪ri安nt凑f(茧"圆张三族:%士s\鸟n"惰,s放tr障);浪皱}揪紫if盒(F虽D_馋IS衡SE肌T(叼fi枝le休no驴(s晌td揉in显),列&r毫ea坊d_篮fd恶))证叙{察姜p景ri厌nt葬f(晴"-临--足--牧--仍--引--避--井--凝--槐--织--赶--轮--肆--消--感-\构n"剥);灿叶f昆ge疼ts撇(s岸tr芝,s乎iz革eo也f(唯st殿r)哑,s经td涉in袍);吓段l侄en翻=w籍ri我te杏(w柏fd竭,s加tr立,s玩tr刘le革n(兆st纤r)地);奸府}}强c得lo诸se歇(r房fd三);够c厌lo检se摇(w鼻fd炮);}胖2.周张三腥端恼#i拍nc费lu肾de绵<东st脂di鼻o.消h>传#i吴nc款lu碍de密<包st茧dl维ib贵.h挥>围#i肺nc烧lu唤de挤<恨fc吩nt碗l.叶h>古#i碎nc垫lu画de缸<酬st雨ri猜ng幅.h诚>普#i立nc痛lu帅de史<旷sy攻s/杯se印le甚ct疏.h饿>颜#i召nc盼lu问de肥<炒sy资s/纳st痕at贴.h制>驱#i婶nc箱lu塑de页<悠er竟rn誉o.附h>驳/*铅张三检端*蠢/妈/*抵作者慕:叶煮建敏胶*/铁/*助QQ春:2哥30当81柔77盐42疫*/授in尺t漆ma嫂in架(){尊in掌t扔i,对rf江d,司wf修d,紧le论n=当0,置fd疤_i桌n;击ch钥ar雾s验tr屈[2路56剥];卧in迷t星fl迟ag表,s伤td沿in突fl飘ag燃;们fd猾_s表et莫w钞ri线te丘_f处d,武re呜ad舒_f皮d;堂st覆ru革ct雕t遣im关ev图al款n屠et非_t拜im药er茄;酷mk生fi倘fo腰("连fi朵fo怀1"军,S翻_I确WU捏SR奖|S穿_I吨RU士SR强|S桐_I天RG词RP跨|S懒_I削RO邀TH阅);设mk坚fi锅fo县("荡fi钟fo盆2"喉,S刃_I晨WU待SR镇|S民_I荣RU敌SR体|S供_I匠RG厘RP雨|S记_I济RO绒TH稍);摘wf绳d=规op朵en除("遥fi五fo筐1"惯,O亩_W著RO接NL军Y)壶;受rf型d=年op格en探("少fi桑fo幼2"塞,O判_R盟DO碑NL爸Y)旱;姐if跑(w逃fd丛<=挣0|联|r刚fd洒<=卖0)拣re下tu娱rn恋0西;秆pr样in汉tf役("躲这是秀张三朋端!英\n沾")坑;滥wh灭il析e(阀1){遣FD秃_Z廉ER驾O(环&r地ea头d_霸fd乒);黄FD穴_S葬ET落(r详fd贿,&仗re金ad话_f籍d)杀;散FD攀_S狸ET坐(f激il咽en妙o(乏st厅di纠n)垦,&数re阶ad果_f拿d)枯;愤ne胁t_伪ti炸me艘r.活tv和_s论ec懂=5枣;剃ne拴t_贫ti杆me渔r.翅tv后_u保se冲c=盆0;甩me悼ms则et已(s探tr埋,0远,s碰iz纹eo堪f(芳st殿r)畜);引if降(i粒=s春el厌ec砌t(汤rf键d+惊1,鹿&r笼ea锣d_总fd赛,N仆UL孔L,短NU讲LL犯,&牲ne乔t_庸ti校me剩r)且<=羡0)版co胃nt踏in逮ue袍;册if荣(F织D_醋IS严SE段T(延rf敬d,叹&r调ea申d_随fd掠)){旁re救ad狸(r骆fd含,s近tr橡,s塘iz坡eo枕f(佳st盒r)众);牙pr求in海tf乱("换--歉--暑--幕--蓬--间--版--春--梨--此--庸--卸--桑\n优")

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论