亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Linux系統(tǒng)教學(xué)中關(guān)于命名管道文件的解析

        2020-06-09 12:20:59趙宏朱忠政常兆斌
        軟件 2020年2期

        趙宏 朱忠政 常兆斌

        摘 ?要: 針對Linux系統(tǒng)相關(guān)內(nèi)容教學(xué)中對于命名管道文件講述不夠詳細(xì),導(dǎo)致學(xué)生對命名管道文件認(rèn)識模糊的問題,基于Linux系統(tǒng)進(jìn)程之間通信機制,講述了進(jìn)程之間通過管道通信的原理、無名管道和命名管道的功能,并通過實例說明了命令方式和程序方式使用命名管道的方法。

        關(guān)鍵詞:?Linux系統(tǒng);文件權(quán)限;命名管道;Python

        中圖分類號: TP301????文獻(xiàn)標(biāo)識碼:?A????DOI:10.3969/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 are 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; Python

        0??引言

        Linux系統(tǒng)作為開放源代碼和自由軟件的代表,廣泛應(yīng)用在各行各業(yè),運行在各種機型和硬件平臺上[1,2]。Linux系統(tǒng)符合POSIX(Portable Operating System Interface)標(biāo)準(zhǔn),功能強大,效率高,配置靈活,安全性高,且具有豐富的工具軟件和應(yīng)用軟件,其相關(guān)內(nèi)容在大多數(shù)高校信息類專業(yè)中作為專業(yè)基礎(chǔ)課開設(shè)[3,4],例如《Linux操作系統(tǒng)》、《Linux系統(tǒng)內(nèi)核分析》、《Linux系統(tǒng)程序設(shè)計》等。

        在Linux系統(tǒng)相關(guān)內(nèi)容教學(xué)中,系統(tǒng)中的文件類型是基本內(nèi)容,大多數(shù)教科書列舉了Linux中的文件類型,包括普通文件(-)、目錄文件(d)、字符設(shè)備文件(c)、塊設(shè)備文件(b)、符號鏈接文件(l)、命名管道文件(p)和套接字文件(s)等七種文件類型[1,4],對于前五種文件,一般都進(jìn)行了詳細(xì)描述,并用實例加以說明,但對于后兩種文件,只是進(jìn)行簡單的描述,也沒有實例的說明。學(xué)生在學(xué)習(xí)中,對于命名管道文件和套接字文件的認(rèn)識很模糊,不利于對Linux系統(tǒng)的深刻理解。

        本文基于Linux系統(tǒng)進(jìn)程間通信機制,討論進(jìn)程間通過管道通信的方法,并通過實例進(jìn)行詳細(xì)說明,加深學(xué)生對命名管道文件的認(rèn)識。

        1??進(jìn)程間管道通信方法

        Linux系統(tǒng)中進(jìn)程間通過管道通信時,將一個進(jìn)程的輸出作為另一個進(jìn)程的輸入。其本質(zhì)是在內(nèi)存中創(chuàng)建一個緩沖區(qū),對緩存區(qū)中的數(shù)據(jù)以先進(jìn)先出FIFO(First Input,F(xiàn)irst Output)的形式進(jìn)行操作,就好像先進(jìn)入管道的水會先流出,后進(jìn)入管道的水會后流出,管道是對緩存區(qū)數(shù)據(jù)操作方式的形象稱謂。

        實現(xiàn)管道功能的內(nèi)存緩存區(qū)被設(shè)計成環(huán)形的數(shù)據(jù)結(jié)構(gòu),便于循環(huán)使用。當(dāng)緩存區(qū)中沒有數(shù)據(jù)時,從緩存區(qū)讀取數(shù)據(jù)的進(jìn)程會被阻塞,直到緩存區(qū)中有數(shù)據(jù),同理,當(dāng)緩存區(qū)中充滿數(shù)據(jù)時,給緩存區(qū)寫入數(shù)據(jù)的進(jìn)程會被阻塞,直到緩存區(qū)中有空閑空間保存寫入的數(shù)據(jù)。當(dāng)讀寫管道的進(jìn)程結(jié)束時,為管道創(chuàng)建的緩存區(qū)也被系統(tǒng)回收。

        1.1??無名管道

        同一個用戶創(chuàng)建的多個進(jìn)程之間利用管道進(jìn)行通信時,由于為管道創(chuàng)建的內(nèi)存緩存區(qū)供同一個用戶的進(jìn)程訪問,不需要用戶身份和操作權(quán)限的鑒別,因此,對內(nèi)存緩存區(qū)不需要進(jìn)行特殊的標(biāo)注,故稱為無名管道。

        無名管道常用于Linux的命令中,用“|”表示,將一個命令的輸出結(jié)果作為另一個命令的輸入。例如“l(fā)s –l | more”,命令“l(fā)s -l”和“more”會各自創(chuàng)建一個進(jìn)程,這兩個進(jìn)程屬于執(zhí)行命令的當(dāng)前用戶,為命令“l(fā)s -l”創(chuàng)建的進(jìn)程將命令的執(zhí)行結(jié)果數(shù)據(jù)以管道的形式傳遞給為命令“more”創(chuàng)建的進(jìn)程,后者進(jìn)程對收到的數(shù)據(jù)在屏幕上進(jìn)行分頁顯示,實現(xiàn)了前者命令結(jié)果分頁顯示的效果。

        1.2??命名管道

        不同用戶創(chuàng)建的進(jìn)程之間利用管道進(jìn)行通信時,由于為管道創(chuàng)建的內(nèi)存緩存區(qū)要同時供不同用戶的進(jìn)程進(jìn)行操作,按照Linux系統(tǒng)嚴(yán)格的用戶身份和操作權(quán)限的規(guī)則,需要對操作內(nèi)存緩存區(qū)的用戶身份和操作權(quán)限進(jìn)行鑒別。

        Linux的文件系統(tǒng)具有完善的用戶身份和操作權(quán)限的鑒權(quán)機制,將文件的操作分為讀(r, read)、寫(w, write)和執(zhí)行(x, execute)等三種權(quán)限;將操作文件的用戶分為文件主(u, user)、同組用戶(g, group)和其他用戶(o, other)等三種角色。對一個文件而言,不同角色的用戶對文件具有不同的操作權(quán)限,保證了操作的安全性。

        為不同用戶進(jìn)程之間通信的管道,借鑒Linux文件系統(tǒng)的用戶身份和操作權(quán)限的鑒權(quán)機制,賦予管道一個文件名,按照文件系統(tǒng)的鑒權(quán)機制對管道操作,因此,稱為命名管道。

        2??進(jìn)程間管道通信方法

        在Ubuntu 18.10系統(tǒng)中創(chuàng)建用戶user1和user2,在user1家目錄下創(chuàng)建子目錄named_pipe,在named_pipe子目錄下利用命令mkfifo創(chuàng)建命名管道文件a.pipe,如圖1所示。

        圖1中,命名管道文件a.pipe的類型為“p”,表明該文件為命名管道文件;文件主為user1,文件主對該文件的操作權(quán)限為“rw-”,表示文件主可以對這個命名管道進(jìn)行讀和寫;文件所屬組為user1,同組用戶對該文件的操作權(quán)限為“rw-”,表示屬于user1組的用戶對這個命名管道進(jìn)行讀和寫;其他用戶對該文件的操作權(quán)限為“r--”,表示其他用戶對這個命名管道只能進(jìn)行讀操作。命名管道文件為特殊的文件,其中不保存數(shù)據(jù),所以,文件字節(jié)數(shù)為零。命名管道文件的操作權(quán)限,規(guī)定了系統(tǒng)中用戶對與該命名管道文件綁定的內(nèi)存緩存區(qū)訪問的鑒權(quán)。

        2.1??命令使用命名管道文件

        為用戶user1和user2各打開一個終端命令窗口,在user1用戶的窗口中運行命令“l(fā)s -l>~/named_?pipe/a.pipe”,利用輸出重定向?qū)⒚畹膱?zhí)行結(jié)果輸出給命名管道,其中,~代表用戶的家目錄;在user2用戶的窗口中運行命令“cat ~user1/named_pipe/?a.pipe”,利用命令cat讀取屬于user1的命名管道文件a.pipe。

        先執(zhí)行命令的窗口中的進(jìn)程將被阻塞,直到另一個窗口中命令輸入完畢并回車。將在user2用戶的窗口中顯示user1窗口執(zhí)行的命令的結(jié)果,如圖2所示。

        該例利用命名管道實現(xiàn)了user1和user2進(jìn)程之間的通信,其中,user1的進(jìn)程向命名管道寫入數(shù)據(jù),user2的進(jìn)程從命名管道讀取數(shù)據(jù);user1作為文件主對命名管道具有寫權(quán)限,user2作為其他用戶對命名管道具有讀權(quán)限,符合a.pipe的權(quán)限規(guī)定。

        如果在user2用戶的窗口中運行命令“l(fā)s -l >~ user1/named_pipe/a.pipe”,則收到“權(quán)限不夠”的提示,如圖3所示,因為user2作為其他用戶,對a.pipe沒有寫權(quán)限。

        如果將用戶user2加入user1組,使user2成為a.pipe的同組用戶,則user2運行命令“l(fā)s -l>~ user1/?named_pipe/a.pipe”會成果,因為同組用戶對a.pipe具有寫權(quán)限。

        2.2??程序使用命名管道文件

        Python語言語法簡潔,語義清晰,有非常豐富和強大庫的支持,廣泛應(yīng)用在數(shù)據(jù)處理、科學(xué)計算、圖形圖像處理、機器學(xué)習(xí)、網(wǎng)絡(luò)編程、多媒體處理、系統(tǒng)運維、游戲服務(wù)器端開發(fā)等多個領(lǐng)域,是目前最流行的計算機編程語言之一[5]。本例選用Python編程語言實現(xiàn)。

        在用戶user1家目錄下創(chuàng)建Python程序文件,pipe01.py,代碼如下。

        1 ?#!/usr/bin/env

        2 ?# coding: utf-8

        3 ?#pipe01.py

        4 ?f=open('/home/user1/named_pipe/a.pipe',?'w')

        5 ?f.write('Hello, I am user1!')

        6 ?f.close()

        在用戶user2家目錄下創(chuàng)建Python程序文件,pipe02.py,代碼如下。

        1 ?#!/usr/bin/env

        2 ?# coding: utf-8

        3 ?# pipe02.py

        4 ?f=open('/home/user1/named_pipe/a.pipe',?'r')

        5 ?info=f.read()

        6 ?print(info)

        7 ?f.close()

        pipe01.py和pipe02.py中代碼前的行號是為敘述方便而加的,以#開頭的代碼為注釋,不執(zhí)行。

        pipe01.py的第4行代碼以寫的方式打開命名管道文件,第5行代碼給打開的文件寫入字符串“Hello,I am user1!”,第6行代碼關(guān)閉打開的文件。

        pipe02.py的第4行代碼以讀的方式打開命名管道文件,第5行代碼從打開的文件讀取數(shù)據(jù)到變量info中,第6行代碼輸出變量info的內(nèi)容,第7行代碼關(guān)閉打開的文件。

        在user1用戶的窗口中運行命令“python pipe01.?py”,通過程序向命名管道文件寫入數(shù)據(jù);在user2用戶的窗口中運行命令“python pipe02.py cat”,通過程序從命名管道文件讀取數(shù)據(jù)。在user2用戶的窗口中將會顯示“Hello, I am user1!”。

        該例以程序的形式,利用命名管道實現(xiàn)了user1和user2進(jìn)程之間的通信,其中,user1的進(jìn)程向命名管道寫入數(shù)據(jù),user2的進(jìn)程從命名管道讀取數(shù)據(jù);user1作為文件主對命名管道具有寫權(quán)限,user2作為其他用戶對命名管道具有讀權(quán)限,符合文件a.pipe的權(quán)限規(guī)定。

        如果用戶user2要向a.pipe中寫入數(shù)據(jù),必須要具備寫權(quán)限,否則,系統(tǒng)會給出沒有操作權(quán)限的提示。

        3??結(jié)束語

        命名管道文件是Linux系統(tǒng)的七種文件之一,也是不同用戶進(jìn)程之間通信的一種手段,在Linux系統(tǒng)中具有重要作用。本文基于Linux系統(tǒng)進(jìn)程之間通信的機制,討論了進(jìn)程之間通過管道通信的本質(zhì),并給出利用命令和程序?qū)崿F(xiàn)不同用戶進(jìn)程之間通過命名管道通信的實例

        參考文獻(xiàn)

        鳥哥. 鳥哥的Linux私房菜基礎(chǔ)學(xué)習(xí)篇(第四版)[M]. 北京: 人民郵電出版社, 2018, 10.

        Machtelt Garrels. Introduction to Linux[EB/OL]. (2010-05-?12) [2019-09-27]. http://tille.garrels.be/training/tldp/.

        燕彩蓉, 朱黎華, 劉瑜琪, 等. 新工科背景下Linux系統(tǒng)課程教學(xué)研究[J]. 計算機教育, 2019(6): 152-156.

        吳淑泉. 高?!癓inux操作系統(tǒng)”課程教學(xué)研究與探索[J]. 教育理論與實踐, 2017, 37(33): 57-58.

        趙宏, 包廣斌, 馬棟林. Python網(wǎng)絡(luò)編程(Linux)[M]. 北京: 清華大學(xué)出版社, 2018, 10.

        欧美另类视频在线| 国产精品福利一区二区| 欧美性受xxxx白人性爽| 亚洲丁香婷婷综合久久小说| 日韩精品中文字幕综合| 风流熟女一区二区三区| 蜜臀性色av免费| 伊人久久大香线蕉av波多野结衣| 伊人久久久精品区aaa片| 国产一区二区精品在线观看| 色婷婷综合一区二区精品久久| 丰满人妻猛进入中文字幕| 亚洲av日韩av天堂一区二区三区| 久久天天躁狠狠躁夜夜2020!| 午夜国产小视频在线观看黄| 文字幕精品一区二区三区老狼| 久久中文精品无码中文字幕下载| 国产高潮精品久久AV无码| 亚洲男人在线天堂av| 无码少妇丰满熟妇一区二区| 精品亚洲国产成人av| 国产精品激情综合久久| 免费在线国产不卡视频| 亚洲a∨无码一区二区三区| a级毛片免费观看视频| 亚洲精品一区二区三区蜜臀| 黄色av一区二区在线观看| 纯爱无遮挡h肉动漫在线播放| 最新国产女主播福利在线观看| 国产高清在线精品一区二区三区| 亚洲精品国产一区二区| 呻吟国产av久久一区二区| 日韩精品夜色二区91久久久| av在线播放免费观看| 国产国产裸模裸模私拍视频| 一本色道久久99一综合| 久久精品亚洲国产成人av| 久久久久亚洲精品男人的天堂| 久久国产精久久精产国| 国产颜射视频在线播放| 日本中文字幕有码网站|