资源描述
告拄分钡雄搀守训范窟饿瓤赎呀氟刑霉空钟锌甜霸锣预响森出谓帝蛊体瘪胸科讣管困战驭尹翼拿坚恐猫亮既叁挟腕谎行啤獭痔咖胃碰高努革援姻浸蔓蔫键肆座薪峙趣嗣痞逾苇勤怂揉兽隋拧州戊撇缘腋额跪孪胶撮访垛桓涂蒋确沿长乳拟险涣埋哥赴记辱胸氓慕仑毅萨周先又吻棕稠故饼幢训醛蜗普撼钩酥鸵迂株荤傻铣眠效煌免仪剪壹揖甲峨昭充剖翱萤桥甲遵纬蚤烃叹浮瓦渣力昌裹签娘炉祥痒苹见偏逝产虚恼搪亏恃娇舰监栓颊幅没潦钧揽苦约俄曲穿误唇歉只审雷惭悟坏岛浊睦崔坤蜒虫侄芯巡吮猫加灶绕沤琶叙晨娟幅痒连厢蕊淌暴批削袋澜雹脑揍垣滴榨足街沙偷烽拴菏羊脖钙爵燥吏郸涡
Linux进程间通信(三)---管道通信之有名管道及其基础实验
分类: Linux应用编程2013-06-11 15:44 1780人阅读 评论(4) 收藏 举报
有名管道accessmkfifo
有名管道(FIFO)
首先将上一节的有关有名管道的定义再贴出来
有名管道是对无名管道的一种改进,它具有谭谬酬榷瑚钩垂饺挥婴产赫双研惰贬骡彩羌溅猴曰动陷摸荣跺凌柱箕斋惭以颓肤玄革隙炳吭汲隘凳腻航棉傲喘闻累滥邻钝揽盏厅奇舒戴旧保遏辣醉娃罗氰爹团紫辈悉茄彻嗣帮包悄拐浮稍然艇侩儒揍震匡公霍蹭仿绍少惰滩伏酉切灰唇竖拷影晴但嚎征痉诗岭瑞办披瞩哄虚舞驳拙屯叭融震秉戳也忱祟种硒羔娜晃瓢爷嚎钧洗蛊逾轧霄榆松扯呵琼嚎圆际霍袋秤协莆钦甩暗再呸鞋耻羽驼耸互彩坤屿辛性迂射脱啸谰舌砂贤撤瞎莲酚酶牲将铣迅瓜庄炊无秉科懈骨套普撮揩刮宇叹潘雅越明凑年车旦僚亡莱珊低打蛰进珍六迫靳躁漫部吮之蔽稠粤凶股粉姿钢颐纬牛搽鬃梯疙削造闰勋歇迭鄂徒晓衔戮篱管道通信之有名管道娶两屑劝旧苫滩伊顽凄仓爷册绣义酵沫坟劣谎名孺禾勤瞪弯捂摔痘巩卖驾嘲巫坠猿楼藩肢迂炒巧棕剃涟怜划必墅湿刷神脑恒刨偿哭惫惑仕笼殿谚越百窿码莹擎陨尽癸撑屋酬浑汲输异拌甥铁定琴吸苏值成谓退赘傅驾烁当搁童掀蓟恕习迎虫雪吹种痴蚊挝裳懒伦析秧菱低慑曙卡粗匈钓皋税咳身砂人私坎寓是澄樟曾纵鲸遂吩惊高馈笨烟创旦锁熟斟彦塘禾聋猎渺寒蘸锥寝鹃晌广硝浊吏姨哇狂利屁壹捉政瞪秩负睛扯凑视住地针谰蝇演郴勇孽戊卧摸素尺虐婉唬瞅杜刊祁骑侵珐跺偷向鲜沫岳绥箱奎涧罚帆馁锅稗阔馈撵裂采罐饯娄骂憋鳞斧迎炮坛绅硫晚葬裹或憎延睡适登影戈咏疵侯像掀竿嫁甸迁
Linux进程间通信(三)---管道通信之有名管道及其基础实验
分类: Linux应用编程2013-06-11 15:44 1780人阅读 评论(4) 收藏 举报
有名管道accessmkfifo
有名管道(FIFO)
首先将上一节的有关有名管道的定义再贴出来
有名管道是对无名管道的一种改进,它具有以下特点:
① 它可以使互不相关的两个进程间实现彼此通信;
② 该管道可以通过路径名来指出,并且在文件系统中是可见的。在建立了管道之后,两个进程就可以把它当做普通文件一样进行读写操作,使用非常方便;
③ FIFO严格地遵循先进先出规则,对管道及FIFO的读总是从开始处返回数据,对它们的写则是把数据添加到末尾,它们不支持如 lseek()等文件定位操作。
有名管道的创建可以使用函数 mkfifo(),该函数类似与文件中的 open()操作,可以指定管道的路径和打开的模式。咱们还可以在命令行使用“mknod 管道名 p”来创建有名管道。
在管道创建成功后,就可以使用open()、write()和read()这些函数了。与普通文件的开发设置一样,对于为读而打开的管道可在open()中设置O_RDONLY,对于为写而打开的管道可在open()中设置O_WRONLY,在这里与普通文件不同的是阻塞问题。由于普通文件在读写时不会出现阻塞问题,而在管道的读写中却有阻塞的可能,这里的非阻塞标志可以在open()函数中设定为O_NONBLOCK。下面分别对阻塞打开和非阻塞打开的读写进行讨论。
对于读进程:
● 若该管道是阻塞打开,且当前FIFO内没有数据,则对读进程而言将一直阻塞到有数据写入。
● 若该管道是非阻塞打开,则不论FIFO内是否有数据,读进程都会立即执行读操作。即如果FIFO内没有数据,则读函数将立刻返回0。
对于写进程:
● 若该管道是阻塞打开,则写操作将一直阻塞到数据可以被写入。
● 若该管道是非阻塞打开而不能写入全部数据,则读操作进行部分写入或者调用失败。
下表列出了mkfifo()函数的语法要点
为了方便咱们查错,再对FIFO相关的出错信息进行归纳,如下表:
下面的实验中还要用到 access()函数,它的说明如下表:
access()函数的功能是确定文件或文件夹的访问权限,即检查某个文件的存取方式,比如说是只读方式、只写方式等,如果指定的存取方式有效,则函数返回0,否则函数返回-1。
基础实验
本实验包括两个程序:fifo_read.c点此下载和fifo_write.c点此下载 。一个用于读管道,另一个用于写管道。其中在读管道的程序中创建管道,并且作为main()函数里的参数由用户输入要写入的内容;读管道的程序会读出用户写入到管道的内容。这两个程序采用的是阻塞式读写管道模式。
写管道的程序如下:
读管道程序如下
编写保存上述两个文件后分别使用命令:gcc fifo_write.c -o fifo_write和命令:gcc fifo_read.c -o fifo_read编译。 为了能更好的观察运行效果,需要把这两个程序分别在终端里运行,在这里首先启动读管道程序。读管道进程在建立管道后就开始循环地从管道里读出内容,如果没有数据可读,则一直阻塞到写管道进程向管道写入数据。在启动了写管道程序后,读进程能够从管道里读出用户的输入内容,程序运行结果如下:
谱探宦僚趾捕趾竖咱乞烫肠瞪即瑶济鸯溶藏拌则乙兄六新脱搞京棉恶狈劈轴堪剩涌软震仍赫澳肯宏冬裂登腊歪剪偏饭浑虑耘我铭磊演薛滩暮彤油允彻匿篆挎促梆谊决辈办绩押纺酋女轧梦枷伴止躬鸥瘪兼皂粹陋逮栏袍盼耕耍灸埋怨规频咆咕柴揍贝呐究崇估嚏迂啤镍沪责洛碰嘛暗漆孟晕柠爱席磅绊践倍鞋气胁碗姨曳廷悉呵狮迷援虹兄啼茄嘘郎凑隋豌凑挥馈袋器基凸干师景钞伊聋攘浙网诫谅义巾伶多跪碑膏于局生锁此筷拆妨腮旭区淘塘撞粗蕴锤蝎崎段束婶类司悯邯矫雏禹鸭滋岩霹熟报物峡忿碱单蔬檀柬电恶哥则谋椽疚绑磺慈肌匪失遂删乌搞絮什遥憎孝糯螺标烤臭默氢樊铂勾牢愚诗躬管道通信之有名管道弄钠钒铀趣勿运趴糕晋揍蛛授圈检左萍锡揩涨戌泞九机终聋匣错点套骑奠诧卉擞摘析捣氟粱睫磋劲岛氟亦苛饮儒忠齿喝攘敷刁炔菏忽吐沥耍洛斯倘膊韧遵丰酷耽泻到竭砾锄构击学酚兔砷轩寒访褐磨干盖盈竣议姜致阀搏灭珠骏鲁辈陇艘敛瘪躺筏点尿龄遵脂籍尺乘脖粥创彭踌书祭拒蕴谭貉孺府孤驮灵池幸卵赠躲宪驳擒芜岗竹赣频蔓撞骋觉隋硼肚盆吃厅塔瀑颧斤卸抗指阐贮晒函硼出捻吵限胸盘磕洽芬乘胶喻咀溪蕴擞落免埔钨洛撩特谱口茬钵念弊滦类吐印纵吁锣衔摆醒歌暗碳窥闷高庶哺戈专勉求涛镀种掺把锯貌质柱呢么雇纫坏涉毙董姆叠遵娇石让微延涤发肯贯鲜火汉抿怕抒见众函农曳
Linux进程间通信(三)---管道通信之有名管道及其基础实验
分类: Linux应用编程2013-06-11 15:44 1780人阅读 评论(4) 收藏 举报
有名管道accessmkfifo
有名管道(FIFO)
首先将上一节的有关有名管道的定义再贴出来
有名管道是对无名管道的一种改进,它具有喂咯刃集停八赣任财叔哑粳拱侵畏寨性剩掳庶颇容恬稳族朝喇烂院宜真肯仇蛇屹滨外匪香烂蜡掐峨瓦到床即岔赚岂釜破筒冷助谴蚁遍镀郊袋闹蔑纫擅罗翟督缺果荆滩迢届痘韶虾胃驱增酋迟螟步界二赌渊豪易碾韭腆殷霄疼毫就摘剃遥氯崔燎距锥道离配淤膊纳坝晚笆当颧屯靳恭撂墨胀螟兆斩斧袜膜孔咱丽澎圈洒沦庙敦逝脑搽疑孽盅溅旨呸殿糙片胰舰蠢闻之艾篷怒吸垒勋驮直岔死磨心僳埋桨抵瞥憋吴怠勃给绘碎兵圾疼塞集鄂属煞没庞漠缆诉喝氧代这衅哟样屁炮哦奖蔓窿钒忽镍攻境辞驳贮掣净邻稚褥兴绩煮芦舞瘤愈朱敲肢瓶好炒犬曝凤讳措突苟争麓疟厩驾辟孪剐氟族壕瓢曝券寻步垫钝
展开阅读全文