企业技术开发第29卷第19期2010年10月 TECHNOLOGICAL DEVELOPMENT OF ENTERPRISE Linux -r管道通信的实现张龙(西安欧亚学院信息工程学院,陕西西安71∞65)摘要:Linux系统提供了丰富的进程通信手段,如信号、信号量、管道、共享内存、消息队列等,能有效地完成多个进程闸的信息共享和数据交换。文章主妥研究了Linux环境中的管道通信技术,并给出了利用管道文件实现两个进程通信的实例。关键词:Linux;管道;进程申图分类号:TP30l文献标识码:A文章编号:lC脱-8937(2010)19-创lO8-但The realization of the pipeline communication under Linux ZHANG Long (School of Infonnation Engineering,泪'anEurasia Univers坷,Xi'剧,Shaanxi71α>65,China) Abstract:Linux system provides rich means of proc回scommunication. such as si伊a1,semaphore. pipeline, shared memory. message queue ect ,which can effectively accomplish information shari鸣anddata exchange among multiple paper mainly analyzes the pipeline communication technology in the Linux environment, and 伊esexamples of realizing two proc倒communication with pipe file. Keywords: Linux; pipe; process Linux系统提供了丰富的进程通信手段,如信号、信从命名管道中读取数据。号灯、管道、共享内存、消息队列等,能有效地完成多个进 窑户端程间的信息共享和数据交换。11文件管道法客户端 管道技术简介H运行环境 #include<> 管道的概念及特点#define filename" m抖ifo"管道是Linux提供的最早的进程通信方式之一,是int mainCint吨;c,char*町'gv[]}. Linux中重要的通信方式,可以把一个程序的输出直接连接到另一个程序的输入。FI皿咐: 管道的创建if( argc!=2) #include<> mkfifo( filename, S_IFlFO ) printf( "Use: fileclient[stri吨]\0"); 管道的读写exit( 1); 对一个空的、阻塞的命名管道的read调用将等待,直到有数据可以读时才能继续执行。与此相反,对一个空if( (fp=fopen(f lename, "w") )==NULL); 的、非阻塞的fifo的read调用将立刻返回0字节。对于阻塞的命名管道的write调用将等待,直到数据可以被写入perror( "fopen"); 时才继续执行。如果请求写人的数据的长度小于或等于exit(t ); PIPLBUF的长度,调用将失败。如果请求写人的数据的长度大于PIPE_BUF字节,将写入部分数据,返回实际写fpu恼(缸gv[1], fp);o, 入的字节数,返回值也可能是0。fcl附(fp);retum(O); 2 通信实例通过两个进程来分析命名管道在进程通信中的使服务端用,其中客户端进程向命名管道中写入数据,服务端进程H文件管道法服务器端ru附收稿日期:2010-05-25#include<> 作者简介:张龙(1977一),男.陕西西安人,硕士研究生,讲师,主要、研究方向:计算机应用。#include<linux/~ 췲랽쫽뻝뗚嘰웳呅䑅但䕎㈰っ䱩헅⣎햪볤쪵맘훐컄周潦瑨捯畮婈⡓䥮䕮䕵㜱䅢獹灲物浥慳獩煵䍡敦慣楮獨慭浵灡浡慮瑥杩牥瑷睩灩晩䭥뫅돌油ㆣ맜뷓⍩浫뛔횱뗄죻쪱偉뎤죫㋍춨폃쫕ퟷꆢ듓㊣ꎬ杣㒣⍤慲?䙉楦數晰晥乯啮敮捯汬慮數晩䱯灲ꆯ牥灩䱩?ㆣ景杩牡獴慮潣浯湵灥䍈噅呅샽춼헂捨〰潶浭杮敵晥捯慲摡數汴楮慬?癥瑨汥湣룥헟퇐기湥敦䱅㈹튪뗄볼쿗䅎潮灥祷晩杣⡡楴楦畴汯瑵ꎮ楶癩튵?摥湵뗆볤긱뗀떽긳튻ꆢ닅偅뛈맽ꎬ쏼쇺浭灥慭?꣐汥긲牭湥獩牡敭?敳䙹畮楺湧牲乏䱏剐ꆣ럖뇠慬灥湵潯㘵楤畮斣捴浰楮瑡捨楰敳汹祺湯?ꎮ汵죕볲뺿⭦䨹敲牯뻭쓪ꎺ탅듊뇪潲景뿍⡩牧⠱⠨猨獥牮?〱慴敲捴ꎬ汩楣灬楮湡벼닅磏ꆢ뗄맜쫇磖쇭룶폐럇쏼볌彂듳ퟖ솽웤쏻컄퓋럾湵獩湭晦潲䱏偍剉샠뫅畮?ꎬ敳楣걥楶汩慮汥獥汯삼摥엊웚뷩랽炣?楺汩楯楮浥慴뗚䱩쾢ꎺ쪶湥敳摳⡦뮧湴捨攡⦣晰慲⠰瑹敮쫵䝉䕎卅럑뫅ꎺ䍨慴獥捴敬獨来玣杹뗍맜탅뗀탖튻㱵뿕쫽ퟨ쏻탸商폚뷚룶훐쿲볾탐㱳컱㱬⢡?枣䱩獳楯楣볊뗀ꆱꎬ璣楯ㄹ퓂湵릲䱩싫慴湥楬뛋慲㴲㵦杶瀩⦣䍁?ꎺ걘楮湵楯浡慧ꎬ깔湩㈰헅瑤녕녦뾪쟑돌뗀쾢뗄?룶뻝죻맜횴偉쫽뷸뿍뮷뛋塩걡?浹磏웚쿭湵ꎺ榡䱩敮쒾潰嬱ꎻ?呐〶楯慴愩溣灨睨桩獴쇺볆浤ꆯ湤獥潰晦랢꽡ꆢ릲룅磌ꪵ돌뒴뛁뿉뗄뗀탐뎤偅ꎬ뮧훐뺳뗍뫍碣㌰?ꆪ걳潲楣湵撣慭튻⠱쯣ꎮ慲敮嶣獴慮楯?景ꎺ敮ꎬ뫐?㠹畣斣꧁릲쿭쓮쓍탲붨깨킴ퟨ틔晩뗄ꆣ뛈ꆪ략살뛋〵㤷믺뛁램剥栾慴돌쫽뮹碣獶⡦걦승ꆱ卨晩㌷?거ꆪ㟒펦ꎮ엏뻝?뭰쮷쿭뫍벰ꦵ꣐뗄걓죻뛁景睲죧ꎬ䉕믘럖뷸좡뿍摨孝楬瀩럾慡汥⦣⠲楰㈵묩폃梡湸꧁붻삣楰彉⥴敮ꎻꊹ쓚쫽쳘쓗얷쫤뗄쪱楴맻뗷䛗횵컶돌뮧慤컱〱敬ꎬꆣ捬??쮷뮻뮽斣䙉ꎮ慭ꎺ꒳〩楮뮵듦뻝뗣뷊죫쏼닅牥斵쟫폃횽튲쿲쓐뛋㦣웷楥ꆣ뭰䙏ㄹ斣ꎬ쳑쒽ꆢ붻붣ꆣ쏻쓜慤쟳붫?뿉쏼晦기뛋湴뮵컄?ꆪ걳牯짂겡샍孳쿻뮻쒽겿맜볌뗷쎽킴쪧경쓜쏻景昧〰桡컷쒽헂捥녗瑲몡〸牥쳍쾢ꆣ짒뗀탸폃ꮵ죫냜ꯐ쫇맜컷捬晦훷獳ꆱ楮꣐ꆪ?낲ꏉ뛓풰뗄횴붫좴ꆣ듈ァ퓚뗀楥潳쳍튪⤩〲죋杝싎꣐퇐엊쇐퇒牥탐솢ﶣ쫽죧?뷸훐湴㴽敲ꎬꆢ억엊뺿乕횶뗈얷뮸慤ꆣ뿌곖뻝맻뾷돌킴쮶ꎮ癥䥡횶쇋쪿䥊캣ꎬ뷊뗷폫략놵뗄쟫훊춨죋?犣ꆱ퇐캣䱩䰩쓊눷곈쓜뷖쳐폃듋믘뷊뎤쟳ﶾ탅쫽깥⦣뺿곈湵ꎻ?폐껒붫쿠プﶾ뛈킴?훐뻝짺碻ꎬ〶킧뮣쓊뗈랴횽?킡죫겷뗄ꎬ뗏얺랾붲㔩뗘곊듽ꎬ?짒폚뗄떻쪹럾얡돖쪦ꋐ킵췪ꎬ뛔ꎶ풱믲쫽?컱?훷얺쒹?돉놽튻퓓믐뗈뻝떼뛋튪엁?뛠폁룶?듈폚뗄쫐뷸뾡샍룶?뿕돌ꊹ꣐뷸?얼삡볊ꊹ닏겲ꊸ?ꋏ쯀ﯓꊶ쎹폁?킵샎좣쒼계ﻊ?뗏탐훁ꞵ붸?즶쳍꣐억??
第29卷第19期张龙:Linux下管道通信的实现9 制efinefilename"m开ifo"c,,fú。其中,fú和"四iot main( void) 是编译得到的两个可执行程序。先在一个命令窗口中运行服务端:mkfifo( filename , S_IFlFOI侃66,0);[fi∞,t@redhatlinux pipe ]#.lfœ while( 1) 然后在另一个命令窗口中运行客户端,并发送信息:[root@redhatlinux pipe ]#.lfœ hello! 运行结果中fifose凹和日"oclient.。是在两个命令fp=fopen( filename, "r"); fget 窗口中同时运行的,旧时发送了一串字符就会在( readbuf. 80 fp ) ; printf( "受到的数据:%s\o",readbuf); 日程序中显示出来。这说明两个进程可以通过管道方式进行通信。另外,运行程序后,系统目录中又产生ret町n(O);了一个新的文件m扩巾,这个文件就是两个通信进程的管道文件。3 运行结果及分析参考文献:编译自和糠文件:[1] [美]DavidA Rusling著,朱坷译.Linux编程白皮书[M].北[root@redhatlinux pipe)#gcc 0 fœ 京:机械工业出版社.2仪)().[r.∞t@redhatlin皿pipeJ#gcc fœ 0 fd时lient.。[2]李琳,李在光,魏新建.Línux环境中管道通信技术的应用这时在目录中可以看到一共有4个文件:fifoserver. 口].计算机与信息技术,2∞8.(上接第4页)多数情况下,第一个查询的效率比第二个索引就会增加系统的开销。本文的写法是在最内层只查高得多。这是由于在CBO优化模式下.Oracle可以将外询RowID,排序也是通过RowID.既不需要建世额外索层的查询条件推到内层查询中,以提高内层查询效率。对引,也不需要回表读,分页后只回表读当前页的数据,大于第一个查询语句,第二层的查询条件WHERE大提高了效率。ROWNUM<=B就可以被Oracle推入到内层查询中,这样3结语Oracle查询的结果一旦超过了ROWNUM限制,就终止查or配leRowID在实际的业务开发中还有很多应用,询将结果返回了。而第二个查询语句,由于BETWEENA 如果应用合理;不但会提高数据库服务器的效率,还能AND B语句存在于查询的第三层,而Oracle无法将第三提高资源的利用率,给企业带来可现的经济效益,提高层的查询条件推到最内层。因此,对于第二个查询语句,竞争力。Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在参考文献z最外层完成,显然这个效率要比第一个低得多。以k语句的缺点是在最内层查询所有宇段,导致对[1 ]王朝阳.构建伽acle双机热备系统[J].网管员世界,2∞8,所有符合条件的数据进行回表读,严重影响了效率,并且(9) : 103-105. 排序宇段C必须建立索引,否则效率会很低,如果建立(上接第5页)ω"皿="black" stroke = "blue" stroke-机d也="2" 00-较详细地介绍了使用PHP动态生成SVG的过程及其具mo回回ver= " ( , style’ , ’ fill: red; , )俨体的应用,相信随着SVG的进一步完善和发展,SVG应onmouseout=" { , style’ , ’ , ); " 1> 用于WEB的技术将会有更大的发展。<!svg> 参考文献:3结语SVG以XML为基础,并且具有其它图像格式所不能[1 ]王振江.XML程序设计[M].~t京:中国铁道出版社,2α)6.[2]黄凯伟.SVG开发实践[M].北京:电子工业出版社,2∞8.比拟的优势租发展前景。本文通过对SVG的分析研究,췲랽쫽뻝뗚헅?⍤楮浡睨晰晧灮㏔ꆣ뇠ꆾ灩昧晦晩헢⣉룟닣폚剏佲톯䅎䋓뛸ퟮ틔쯹업㘰浯潮㲣掣汩쿈좻桥퓋뒰뗀쇋맜닎創뺩昲쯷틽듳㎽副죧쳡뺺ꎬ뷏쳥폃ꆯ卖뇈昱ꆣ晩浫췓?쇺敦晦景ꆱ꽳汬慣⠹㈹楮楬整牯灥畳浯뾼ㆡ獬ꎺꆿ䪡㊡㵦湦틫쪱쾽뗃뗄뗚坎慣붫뛦훐췢짏폐탲걦敮퓚뫳탐뿚랽튻뗀틽副ꎬ쳡睉맻룟헹쿪폚䟒쓢汥쯐晩瑵ꎺ楮潳獥捬癧漡汥⦣뻭⡶攨⡲潴崣氣敯畳볾뾡믺샮뾣뿍췵뾻湡潰昨晩퓚펵뛠닩튻啍汥뷡볤닣폯럻ퟖ楦璣훐獥쪽룶컄뻍睬튲룟䓔펦솦쾸坅푘뗄景洨䱩?킽敲牶楥渽먱뗚浥潩ㄩ敡䁲来杣?癥敯ꎮ쿗뻃柖킵쇕꺼헱욿湴敮ꆱ景癥敲쒿?ꆣ톯룶㰽닩맻ퟮ닣췪뻤뫏뛎潳기쇭춬牶뷸탂볾믡䒣늻쇋?폃풴〳뗘䊵䵌폅⡦伩ꆱㄹ搩摢敤?튳爽畴ꎯꎺ쁝릤ꎬ웋꿑붭귎啣犣ꎮ扬ꆪ楬ꎻ⡦쫜獥슼튳헢쳵닩䊾톯략?쓚돉뗄䎱敲쫇쏼튻훐쪱탐ꆣ퓶곅탨킧떼뫏뷩ꎬ쒼캪쫆浹웚畦桡ꆰ㶡晦䑡곖튵샮ꎮ낣쿂﮼깣?慣敮昧楬떽牶훐⦶쫇볾톯춿뗄믘?닣좱?癥뇠쇮룶晩퓋ꎮ춨컄볓에튪싊쪵샭샻짜쿠볊믹뫍맜ꎬ瑬殡敶녥摩景癩돶퓚䀘꺹㖣塍깓晦낷慭뗀敮뗄敲뿉평췆폯짒뷡쇋략룸쿔뗣녳牊틫뒰쏼景탐侳탅볾쾵믘ꆣ쓒ꎻ폃뒡랢㠰楮業璣癴湵獥捬?냦맢립䲳噇澡斣춨훎瑲慭ꎬ쫽ꎮ畸牸틔ﷇ폚떽뻤풱맻ꆣ꾵믘ퟮ좻쫇ꣁ깴澡뗃뿚牶쇮楥獥뗄쳐浹짧엏춳닊뇭뗎늻싊ꡏ쪹쯦ꮻ햹뾪?걓탅潫晰?慲瑡敲湴까캺ꊼ牡랢斣뻝斺뾴퓚쓚ꎬ뭏튻뛸쒵ퟮ룸췢헢ꋋꍦ떽훐뒰牶쇭晩쟍뛁떫폃ퟅ늢잰뗄攽彉⦣来牧ꎮ楮㈰탂볊捬쪵겡ꎺ쵦떽䍂닣뗚牡떩?쓚훐룶ퟮ뷸ꆱ晦뗄퓋뿚敲탏췢景뾪ꢹꎬꪷ믡룸偈卖킸쟒뺰䙉?璣整畸〰붨旋왦볹쿖扬굲ꎥ晦튻슣俓닩뛾捬뎬ﶲ닣볤뗄킧쓚탐ﶣ潥솽훐ꎮ景퓊ꎬ쿺ﵒ럖ꋖ쳡웳傶䞵ﲴ뻟ꆣ䙏略깳ꎮ뇠갲ꮻ䶡ꆾ椰ꆯ玡潥릲겵얻톯닣旍맽룶ꆣ튲싊믘겷汩럾퓋侺捬뺳헢潷튳킻룟튵꿌쒽폐놾ꆱ整獥돌䱩〰靖뾣䶡㘶⦣ꉉ汩폐?꿄훐뗄웈쇋닩겶틲쫇튪뇭獴敮뿉컱탐쵦楥룶놾汄뫳맓쫽듸곉쒷웤컄䅴瑁냗湵㢣좱꺱뾣㚣牯?没敮㒸뮸ꏊꎬ닩剏톯듋쫇쯹뇈뛁璣횴뛋뿍晦湴뒡돌컄횻킺뻝살荒뮲ꋕ쯼춨瑲瑴욤碻룏놾꺱步갰놣璣뷏틔톯뷄坎폯牡ꎬ쯹폐뗚Ꟃ楢物깥탐ꎺ뮧潥ꎮꏕ탲볾쫩랾뗄볈믘?뿢뿉뗍쥓뷍릡춼맽ꦣ놾ꆪ⦣畴扵ꆾ돖뎡뫖ꦣ걲깃쒼슣쳡쳵?啍뻤捬뛔폐쫽튻퇏쪻睩ꎬ돌뛋汩シ뫳뻍킴늻뇭럾맛噇쿱?摴攨瑥䶡킹빊몵敡풴ﺣ꾵걏룟볾쿞ꎬ旎폚싺뻝룶ퟖ훘晦탲敮ꋋ뗃쫇램탨뛁ꛓ컱뗄욺룱卖栽ꆯ⢡뾣?ꆿ頻摢컄멦쓐牡쓚坈훆평?뗚ퟣꆣ뗍뛎펰?景늢璣췁쾵솽쫇튪떱쎣웷뺭맽춷쪽䞵ꆱ獴꽳꺱샍ꎮ蝹펹畦볾楦Ꟃ捬닣䕒꿖ꎬ폚ꢽ뛾쳵쫽뗃쿬춣㊡敬랢기쯒붸춳룶퓚붨잰?뗄볃돌ꋕ쯹쒷祬瑹?꣐췸삳ꓒ녯⦣ꎺ潳쪱斿닩?킣뻍䉅ꮵ룶볾뻝뛠떼쇋곈楥쯍쫇뮴쒿춨ퟮ믂튳킧벰릣늻훎斡汥얼맜떳溡?敲좵짒톯곕훕呗?닩뗄ꆣ훂킧湴탅퓚껗슼쓚뛮싊틦웤걓쓜꾣ꆯ볊풱?癥?풽킧횹䕅?톯쫽맽뛔싊﮽겡ꎬ潯쾢솽횷첿훐뷸닣췢쫀뻟噇킾꽦ꆱ쓓뷧갲犣ﺸꯍ싊?닩폯뻝싋ꎬꣁ웤ꎺ룶﮾짒폖돌횻쯷뮹쳡펦뾣楬⦣ꛓ〰갲?ꆣ뻤ꎬ퓚늢훐쏼춻퓍닺뗄닩쓜룟沣뭉?㈰㚣〰뛔ꎬ쟒쇮ꢹ짺듳멲䦣〸?㢣晦?ﶹ敤꼾ꎬ?景?ꎻ獥ꆯ⦣牶뮡敲?ꎮ澺쵦❦景採?