版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 linux系統(tǒng)教學(xué)中關(guān)于命名管道文件的解析 趙宏朱忠政常兆斌摘 要: 針對(duì)linux系統(tǒng)相關(guān)內(nèi)容教學(xué)中對(duì)于命名管道文件講述不夠詳細(xì),導(dǎo)致學(xué)生對(duì)命名管道文件認(rèn)識(shí)模糊的問(wèn)題,基于linux系統(tǒng)進(jìn)程之間通信機(jī)制,講述了進(jìn)程之間通過(guò)管道通信的原理、無(wú)名管道和命名管道的功能,并通過(guò)實(shí)例說(shuō)明了命令方式和程序方式使用命名管道的方法。關(guān)鍵詞: linux系統(tǒng);文件權(quán)限;命名管道;python: tp301 : a doi:10.396
2、9/j.issn.1003-6970.2020.02.023【abstract】: most university students have the vague knowledge of named pipe file in linux learning because the detailed explain about the named pipe is absent in linux teaching files. communicate principle between processes, functions of anonymous pipe and named pipe ar
3、e discussed in detailed. examples are presented in command and program modes to illustrate the usage of named pipe.【key words】: linux system; file permission; named pipe; python0 引言linux系統(tǒng)作為開(kāi)放源代碼和自由軟件的代表,廣泛應(yīng)用在各行各業(yè),運(yùn)行在各種機(jī)型和硬件平臺(tái)上1,2。linux系統(tǒng)符合posix(portable operating system interface)標(biāo)準(zhǔn),功能強(qiáng)大
4、,效率高,配置靈活,安全性高,且具有豐富的工具軟件和應(yīng)用軟件,其相關(guān)內(nèi)容在大多數(shù)高校信息類專業(yè)中作為專業(yè)基礎(chǔ)課開(kāi)設(shè)3,4,例如linux操作系統(tǒng)、linux系統(tǒng)內(nèi)核分析、linux系統(tǒng)程序設(shè)計(jì)等。在linux系統(tǒng)相關(guān)內(nèi)容教學(xué)中,系統(tǒng)中的文件類型是基本內(nèi)容,大多數(shù)教科書(shū)列舉了linux中的文件類型,包括普通文件(-)、目錄文件(d)、字符設(shè)備文件(c)、塊設(shè)備文件(b)、符號(hào)鏈接文件(l)、命名管道文件(p)和套接字文件(s)等七種文件類型1,4,對(duì)于前五種文件,一般都進(jìn)行了詳細(xì)描述,并用實(shí)例加以說(shuō)明,但對(duì)于后兩種文件,只是進(jìn)行簡(jiǎn)單的描述,也沒(méi)有實(shí)例的說(shuō)明。學(xué)生在學(xué)習(xí)中,對(duì)于命名管道文件和套接字
5、文件的認(rèn)識(shí)很模糊,不利于對(duì)linux系統(tǒng)的深刻理解。本文基于linux系統(tǒng)進(jìn)程間通信機(jī)制,討論進(jìn)程間通過(guò)管道通信的方法,并通過(guò)實(shí)例進(jìn)行詳細(xì)說(shuō)明,加深學(xué)生對(duì)命名管道文件的認(rèn)識(shí)。1 進(jìn)程間管道通信方法linux系統(tǒng)中進(jìn)程間通過(guò)管道通信時(shí),將一個(gè)進(jìn)程的輸出作為另一個(gè)進(jìn)程的輸入。其本質(zhì)是在內(nèi)存中創(chuàng)建一個(gè)緩沖區(qū),對(duì)緩存區(qū)中的數(shù)據(jù)以先進(jìn)先出fifo(first input,first output)的形式進(jìn)行操作,就好像先進(jìn)入管道的水會(huì)先流出,后進(jìn)入管道的水會(huì)后流出,管道是對(duì)緩存區(qū)數(shù)據(jù)操作方式的形象稱謂。實(shí)現(xiàn)管道功能的內(nèi)存緩存區(qū)被設(shè)計(jì)成環(huán)形的數(shù)據(jù)結(jié)構(gòu),便于循環(huán)使用。當(dāng)緩存區(qū)中沒(méi)有數(shù)據(jù)
6、時(shí),從緩存區(qū)讀取數(shù)據(jù)的進(jìn)程會(huì)被阻塞,直到緩存區(qū)中有數(shù)據(jù),同理,當(dāng)緩存區(qū)中充滿數(shù)據(jù)時(shí),給緩存區(qū)寫(xiě)入數(shù)據(jù)的進(jìn)程會(huì)被阻塞,直到緩存區(qū)中有空閑空間保存寫(xiě)入的數(shù)據(jù)。當(dāng)讀寫(xiě)管道的進(jìn)程結(jié)束時(shí),為管道創(chuàng)建的緩存區(qū)也被系統(tǒng)回收。1.1 無(wú)名管道同一個(gè)用戶創(chuàng)建的多個(gè)進(jìn)程之間利用管道進(jìn)行通信時(shí),由于為管道創(chuàng)建的內(nèi)存緩存區(qū)供同一個(gè)用戶的進(jìn)程訪問(wèn),不需要用戶身份和操作權(quán)限的鑒別,因此,對(duì)內(nèi)存緩存區(qū)不需要進(jìn)行特殊的標(biāo)注,故稱為無(wú)名管道。無(wú)名管道常用于linux的命令中,用“|”表示,將一個(gè)命令的輸出結(jié)果作為另一個(gè)命令的輸入。例如“l(fā)s l | more”,命令“l(fā)s -l”和“more”會(huì)各自創(chuàng)建一
7、個(gè)進(jìn)程,這兩個(gè)進(jìn)程屬于執(zhí)行命令的當(dāng)前用戶,為命令“l(fā)s -l”創(chuàng)建的進(jìn)程將命令的執(zhí)行結(jié)果數(shù)據(jù)以管道的形式傳遞給為命令“more”創(chuàng)建的進(jìn)程,后者進(jìn)程對(duì)收到的數(shù)據(jù)在屏幕上進(jìn)行分頁(yè)顯示,實(shí)現(xiàn)了前者命令結(jié)果分頁(yè)顯示的效果。1.2 命名管道不同用戶創(chuàng)建的進(jìn)程之間利用管道進(jìn)行通信時(shí),由于為管道創(chuàng)建的內(nèi)存緩存區(qū)要同時(shí)供不同用戶的進(jìn)程進(jìn)行操作,按照l(shuí)inux系統(tǒng)嚴(yán)格的用戶身份和操作權(quán)限的規(guī)則,需要對(duì)操作內(nèi)存緩存區(qū)的用戶身份和操作權(quán)限進(jìn)行鑒別。linux的文件系統(tǒng)具有完善的用戶身份和操作權(quán)限的鑒權(quán)機(jī)制,將文件的操作分為讀(r, read)、寫(xiě)(w, write)和執(zhí)行(x, execut
8、e)等三種權(quán)限;將操作文件的用戶分為文件主(u, user)、同組用戶(g, group)和其他用戶(o, other)等三種角色。對(duì)一個(gè)文件而言,不同角色的用戶對(duì)文件具有不同的操作權(quán)限,保證了操作的安全性。為不同用戶進(jìn)程之間通信的管道,借鑒linux文件系統(tǒng)的用戶身份和操作權(quán)限的鑒權(quán)機(jī)制,賦予管道一個(gè)文件名,按照文件系統(tǒng)的鑒權(quán)機(jī)制對(duì)管道操作,因此,稱為命名管道。2 進(jìn)程間管道通信方法在ubuntu 18.10系統(tǒng)中創(chuàng)建用戶user1和user2,在user1家目錄下創(chuàng)建子目錄named_pipe,在named_pipe子目錄下利用命令mkfifo創(chuàng)建命名管道文件a.pi
9、pe,如圖1所示。圖1中,命名管道文件a.pipe的類型為“p”,表明該文件為命名管道文件;文件主為user1,文件主對(duì)該文件的操作權(quán)限為“rw-”,表示文件主可以對(duì)這個(gè)命名管道進(jìn)行讀和寫(xiě);文件所屬組為user1,同組用戶對(duì)該文件的操作權(quán)限為“rw-”,表示屬于user1組的用戶對(duì)這個(gè)命名管道進(jìn)行讀和寫(xiě);其他用戶對(duì)該文件的操作權(quán)限為“r-”,表示其他用戶對(duì)這個(gè)命名管道只能進(jìn)行讀操作。命名管道文件為特殊的文件,其中不保存數(shù)據(jù),所以,文件字節(jié)數(shù)為零。命名管道文件的操作權(quán)限,規(guī)定了系統(tǒng)中用戶對(duì)與該命名管道文件綁定的內(nèi)存緩存區(qū)訪問(wèn)的鑒權(quán)。2.1 命令使用命名管道文件為用戶user
10、1和user2各打開(kāi)一個(gè)終端命令窗口,在user1用戶的窗口中運(yùn)行命令“l(fā)s -l>/named_ pipe/a.pipe”,利用輸出重定向?qū)⒚畹膱?zhí)行結(jié)果輸出給命名管道,其中,代表用戶的家目錄;在user2用戶的窗口中運(yùn)行命令“cat user1/named_pipe/ a.pipe”,利用命令cat讀取屬于user1的命名管道文件a.pipe。先執(zhí)行命令的窗口中的進(jìn)程將被阻塞,直到另一個(gè)窗口中命令輸入完畢并回車。將在user2用戶的窗口中顯示user1窗口執(zhí)行的命令的結(jié)果,如圖2所示。該例利用命名管道實(shí)現(xiàn)了user1和user2進(jìn)程之間的通信,其中,user1的進(jìn)
11、程向命名管道寫(xiě)入數(shù)據(jù),user2的進(jìn)程從命名管道讀取數(shù)據(jù);user1作為文件主對(duì)命名管道具有寫(xiě)權(quán)限,user2作為其他用戶對(duì)命名管道具有讀權(quán)限,符合a.pipe的權(quán)限規(guī)定。如果在user2用戶的窗口中運(yùn)行命令“l(fā)s -l > user1/named_pipe/a.pipe”,則收到“權(quán)限不夠”的提示,如圖3所示,因?yàn)閡ser2作為其他用戶,對(duì)a.pipe沒(méi)有寫(xiě)權(quán)限。如果將用戶user2加入user1組,使user2成為a.pipe的同組用戶,則user2運(yùn)行命令“l(fā)s -l> user1/ named_pipe/a.pipe”會(huì)成果,因?yàn)橥M用戶對(duì)a.pipe具有寫(xiě)權(quán)限。
12、2.2 程序使用命名管道文件python語(yǔ)言語(yǔ)法簡(jiǎn)潔,語(yǔ)義清晰,有非常豐富和強(qiáng)大庫(kù)的支持,廣泛應(yīng)用在數(shù)據(jù)處理、科學(xué)計(jì)算、圖形圖像處理、機(jī)器學(xué)習(xí)、網(wǎng)絡(luò)編程、多媒體處理、系統(tǒng)運(yùn)維、游戲服務(wù)器端開(kāi)發(fā)等多個(gè)領(lǐng)域,是目前最流行的計(jì)算機(jī)編程語(yǔ)言之一5。本例選用python編程語(yǔ)言實(shí)現(xiàn)。在用戶user1家目錄下創(chuàng)建python程序文件,pipe01.py,代碼如下。1 #!/usr/bin/env2 # coding: utf-83 #pipe01.py4 f=open('/home/user1/named_pipe/a.pipe
13、', 'w')5 f.write('hello, i am user1!')6 f.close()在用戶user2家目錄下創(chuàng)建python程序文件,pipe02.py,代碼如下。1 #!/usr/bin/env2 # coding: utf-83 # pipe02.py4 f=open('/home/user1/named_pipe/a.pipe', 'r')5 info=f.read()6 print(in
14、fo)7 f.close()pipe01.py和pipe02.py中代碼前的行號(hào)是為敘述方便而加的,以#開(kāi)頭的代碼為注釋,不執(zhí)行。pipe01.py的第4行代碼以寫(xiě)的方式打開(kāi)命名管道文件,第5行代碼給打開(kāi)的文件寫(xiě)入字符串“hello,i am user1!”,第6行代碼關(guān)閉打開(kāi)的文件。pipe02.py的第4行代碼以讀的方式打開(kāi)命名管道文件,第5行代碼從打開(kāi)的文件讀取數(shù)據(jù)到變量info中,第6行代碼輸出變量info的內(nèi)容,第7行代碼關(guān)閉打開(kāi)的文件。在user1用戶的窗口中運(yùn)行命令“python pipe01. py”,通過(guò)程序向命名管道文件寫(xiě)入數(shù)據(jù);在user2用戶的窗口
15、中運(yùn)行命令“python pipe02.py cat”,通過(guò)程序從命名管道文件讀取數(shù)據(jù)。在user2用戶的窗口中將會(huì)顯示“hello, i am user1!”。該例以程序的形式,利用命名管道實(shí)現(xiàn)了user1和user2進(jìn)程之間的通信,其中,user1的進(jìn)程向命名管道寫(xiě)入數(shù)據(jù),user2的進(jìn)程從命名管道讀取數(shù)據(jù);user1作為文件主對(duì)命名管道具有寫(xiě)權(quán)限,user2作為其他用戶對(duì)命名管道具有讀權(quán)限,符合文件a.pipe的權(quán)限規(guī)定。如果用戶user2要向a.pipe中寫(xiě)入數(shù)據(jù),必須要具備寫(xiě)權(quán)限,否則,系統(tǒng)會(huì)給出沒(méi)有操作權(quán)限的提示。3 結(jié)束語(yǔ)命名管道文件是linux系統(tǒng)的七種文
16、件之一,也是不同用戶進(jìn)程之間通信的一種手段,在linux系統(tǒng)中具有重要作用。本文基于linux系統(tǒng)進(jìn)程之間通信的機(jī)制,討論了進(jìn)程之間通過(guò)管道通信的本質(zhì),并給出利用命令和程序?qū)崿F(xiàn)不同用戶進(jìn)程之間通過(guò)命名管道通信的實(shí)例參考文獻(xiàn)鳥(niǎo)哥. 鳥(niǎo)哥的linux私房菜基礎(chǔ)學(xué)習(xí)篇(第四版)m. 北京: 人民郵電出版社, 2018, 10.machtelt garrels. introduction to linuxeb/ol. (2010-05- 12) 2019-09-27. http:/tille.garrels.be/training/tldp/.燕彩蓉, 朱黎華, 劉瑜琪, 等. 新工科背景下linux系統(tǒng)課程教學(xué)研究j. 計(jì)算機(jī)教育, 2019(6): 152-156
溫馨提示
- 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年度產(chǎn)學(xué)研合作項(xiàng)目研發(fā)成果轉(zhuǎn)化與知識(shí)產(chǎn)權(quán)保護(hù)協(xié)議4篇
- 2024版軟件源碼授權(quán)保密協(xié)議范本
- 二手房私人交易協(xié)議模板2024版B版
- 2025年度新能源電池研發(fā)與采購(gòu)安裝合同范本3篇
- 2025年度廠房修建與綠色建筑節(jié)能檢測(cè)服務(wù)合同4篇
- 2025年度智慧城市建設(shè)規(guī)劃與實(shí)施合同4篇
- 2025年度地理信息數(shù)據(jù)庫(kù)建設(shè)測(cè)繪合同4篇
- 2025年度企業(yè)培訓(xùn)中心場(chǎng)地租賃及課程開(kāi)發(fā)服務(wù)合同3篇
- 二零二五年度傳統(tǒng)煙酒品牌傳承保護(hù)協(xié)議
- 二零二五年度研學(xué)旅行安全保障及責(zé)任劃分合同
- 銀行2025年紀(jì)檢工作計(jì)劃
- 2024-2024年上海市高考英語(yǔ)試題及答案
- 注射泵管理規(guī)范及工作原理
- 山東省濟(jì)南市2023-2024學(xué)年高二上學(xué)期期末考試化學(xué)試題 附答案
- 大唐電廠采購(gòu)合同范例
- 國(guó)潮風(fēng)中國(guó)風(fēng)2025蛇年大吉蛇年模板
- GB/T 18724-2024印刷技術(shù)印刷品與印刷油墨耐各種試劑性的測(cè)定
- IEC 62368-1標(biāo)準(zhǔn)解讀-中文
- 15J403-1-樓梯欄桿欄板(一)
- 2024年中考語(yǔ)文名句名篇默寫(xiě)分類匯編(解析版全國(guó))
- 新煤礦防治水細(xì)則解讀
評(píng)論
0/150
提交評(píng)論