999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Linux教學中進程之間通過特殊文件通信的解析*

2022-10-14 06:55:06龐偉業袁繼泉陳星宇
計算機時代 2022年10期
關鍵詞:進程用戶

趙 宏,龐偉業,袁繼泉,陳星宇

(蘭州理工大學計算機與通信學院,甘肅 蘭州 730050)

0 引言

Linux 符 合POSIX(Portable Operating System Interface)標準,功能強大,效率高,配置靈活且安全性高,具有豐富的工具軟件和應用軟件,廣泛應用在各行各業,運行在包括大型機、中型機、小型機、工作站、微機、嵌入式設備、可穿戴設備等各種機型和硬件平臺上,是開放源代碼和自由軟件中的杰出代表,是我國開發國產操作系統的主要依托。

許多高校將Linux 相關內容納入教學,在信息類專業中開設Linux 操作系統、Linux 系統內核分析、Linux系統程序設計、Linux網絡編程等課程。

在Linux 相關教學中,Linux 系統中的文件管理是核心內容。大多數教科書列舉了Linux 中的文件類型,包括普通文件(-)、目錄文件(d)、字符設備文件(c)、塊設備文件(b)、符號鏈接文件(l)、命名管道文件(p)和套接字文件(s)等七種文件類型。對于前五種文件,一般都有詳細講解,有實例,對于后兩種文件均一帶而過。文獻[6]和文獻[7]對命名管道和套接字文件有較為詳細的介紹,用實例演示了這兩種文件的用法,但對于這兩種文件為什么會用于進程之間的通信,未給出進一步的說明。

本文從Linux 系統文件授權機制和安全保障機制出發,結合用戶進程之間通信時的權限需求,介紹命名管道文件和套接字文件的使用,加深學生對Linux系統中進程之間通信中借用文件授權機制的認識,引導學生在實際中使用命名管道文件和套接字文件。

1 進程和進程通信

進程是程序在數據集上運行的過程,程序運行中所需的系統資源,例如內存、CPU 等,需要以進程的身份進行申請,因此,進程是獲得系統資源的基本單位。一個進程的執行過程可以看作是一個任務的執行過程,多個進程的同時執行,可以看作是多個任務的同時執行。現代計算機操作系統都支持多進程的同時執行。多進程的同時執行分為并行、并發以和并行與并發的混合。并行就是不同的進程同時執行在不同CPU 或者不同核上。并發就是多個進程以一定規則輪流在同一個CPU或者核上執行,由于CPU執行速度很快,盡管微觀上來看是多個進程輪流執行,但宏觀上卻表現出多個進程的同時執行。并行與并發的混合指多個進程執行時既有并行也有并發,是現代多CPU或者多核計算機運行的常見形式。

多個同時運行的進程之間經常需要進行通信,常用的通信方式有鎖、信號量、消息隊列、共享內存、無名管道、命名管道、套接字等多種形式。進程之間通信時,如果不需要對參與通信的進程權限進行驗證,則根據實際需要選用鎖、信號量、消息隊列、共享內存、無名管道等通信方式中的一種通信方式即可;但是,如果需要對參與通信的進程進行權限驗證,則需要使用命名管道或套接字通信方式進行,這是因為命名管道或套接字通信方式可以使用文件系統完善的鑒權機制,實現不同用戶的進程之間通信時不同進程具有不同操作權限的功能。

2 文件系統鑒權機制

Linux 主要使用Ext 系列文件系統,Ext 系列文件系統具有完善的鑒權機制,分為基本權限、擴展權限、文件屬性設置、操作控制列表等多級權限。進程之間利用命名管道或者套接字通信時,由于生成了相應的管道文件和套接字文件,因此,可以使用文件系統的鑒權機制。

2.1 文件基本權限

讀權限和寫權限是文件基本權限。用單詞read的第一個字母r 表示文件“可讀”;用單詞write 的第一個字母w 表示文件“可修改/刪除”。還有文件的可執行權限,用單詞execute的第二個字母x表示。

文件的三種操作:文件主,表示擁有文件的用戶,用單詞user的第一個字母u 表示;同組用戶,表示與擁有文件的用戶屬于同一個組,用單詞group 的第一個字母g表示;其他用戶,表示與擁有文件的用戶不屬于同一個組,用單詞other的第一個字母o表示。

對文件操作的三類用戶和文件的三種操作權限進行組合,形成文件的基本操作屬性,分三組,每組三位。第一組表示文件主對文件的操作權限,第二組表示同組用戶對文件的操作權限,第三組表示其他用戶對文件的操作權限。每一個位置需要標上操作權限,若沒有操作權限,用符號“-”表示。例如:rwxr-xr--,表示文件主對文件具有讀、寫和執行權限;同組用戶對文件具有讀和執行權限;其他用戶對文件僅有讀權限。

文件的授權屬性經常用9 位二進制數記錄,有權限的位設為1,無權限的位設為0,轉換為三位八進制數表示。例如:二進制數111101100,轉換為八進制為754,表示文件主對文件具有讀、寫和執行權限;同組用戶對文件具有讀和執行權限;其他用戶對文件僅有讀權限。

文件的基本權限是不同用戶進程之間利用命名管道或者套接字通信時主要使用的權限。

1、品種選擇:應根據本地區的生態環境條件,選用高產、優質、適應性及抗病性強、生育期所需積溫比動地常年活動積溫少150℃的優良品種。

2.2 文件擴展權限

在文件基本權限的基礎上擴展了SUID、SGID 和粘附位等,形成文件擴展權限。其中,SUID 表示當文件執行時,執行該文件的用戶能夠在文件執行期間獲得文件主的權限;SGID 表示當文件執行時,執行該文件的用戶在文件執行期間擁有文件主所在主組用戶的權限;粘附位表示只有文件主和root 用戶才能刪除帶有該標識的文件,其他用戶雖然有“w”權限,但仍然不能刪除帶有該標識的文件。

由于進程之間利用命名管道或者套接字通信時主要在內存中進行數據交換,而文件擴展權限主要用于文件執行和刪除,因此,進程之間利用命名管道或者套接字通信時一般不使用文件擴展權限。

2.3 文件屬性設置

文件屬性在文件基本權限基礎上,對文件自身和內容進行更近一步的保護,使用命令chattr 設置文件屬性,命令lsattr查看文件的屬性。

文件屬性對命名管道文件和套接字文件無效,因此,進程之間利用命名管道或者套接字通信時不能使用文件屬性的設置。

2.4 操作控制列表設置

操作控制列表在文件基本權限基礎上,對文件的操作權限作更細致的設置,用命令setfacl 設置文件的操作控制列表,用命令getfacl 查看文件操作控制列表的設置。例如命令:setfacl -m user1:rw a1.txt,設置用戶user1擁有對文件a1.txt的讀寫權限。

不同用戶進程之間利用命名管道或者套接字通信時,可以使用文件的操作控制列表設置。

3 不同用戶進程之間通過命名管道通信實例

3.1 命名管道文件的創建

用戶user1 運行以下Python 程序,創建屬于自己的命名管道文件pipe1。

上述代碼調用模塊os 中的mkfifo()函數,創建命名管道文件pipe1,如果pipe1文件已經存在,則輸出捕獲到的“File exists”的異常。

默認情況下,命名管道文件pipe1 的操作權限為:rw-r--r--,即文件主對文件可讀可寫,同組用戶和其他用戶對文件可讀。

3.2 命名管道文件的使用

user1 通過命名管道發送消息,user2 通過命名管道接收消息。

user1運行下面的代碼,向命名管道文件寫入消息。

user2運行下面的代碼,從命名管道文件讀取消息。

上述user1和user2通過命名管道通信成功。

user1 運行命令:chmod 600 pipe1,使得管道文件pipe1 的操作權限變為:rw----,即同組用戶和其他用戶對管道文件pipe1不再擁有任何操作權限。

再次讓user1和user2通過命名管道通信,user2運行接收消息的程序時,會收到“PermissionError:[Errno 13]Permission denied: '/home/user1/pipe1'”錯誤提示,這表示用戶對pipe1文件沒有相應的操作權限。

user1運行命令chmod或者setfacl,使得user2擁有對文件pipe1 的讀權限,此時,user1 和user2 通過命名管道的通信會再次成功。

4 不同用戶進程之間通過套接字通信實例

進程之以套接字方式通信時,套接字文件需要服務端新建,因此,同一用戶的進程之間通過套接字通信時,不存在文件權限的問題。而不同用戶的進程之間通信時,會因為客戶端對新建的套接字文件無寫權限而導致通信失敗,因此,不同進程之間通過套接字通信時,在套接字文件建立后,需要使用chmod 或者setfacl 命令,給客戶端進程的用戶授權套接字文件的寫權限。

假設用戶user1 的進程為服務端,用戶user2 的進程為客戶端,兩者之間通過套接字通信,服務端Python代碼如下:

該段程序第四行引入os 模塊,是因為需要修改套接字文件的操作權限;第五行設定進程之間使用套接字文件通信;第六行會自動創建套接字文件a.socket,若a.socket 已經存在,則會出錯;第七行調用os 模塊的system 函數,使用命令setfacl 給user2 賦予套接字文件a.socket 的讀寫權限;第23 行調用os 模塊的system 函數,使用命令rm刪除使用完畢的套接字文件a.socket。客戶端Python代碼如下。

用戶user1 運行服務端代碼,用戶user2 運行客戶端代碼,可以實現user2 將字符串通過套接字發送給user1,user1 將收到的字符串中的字母轉換為大寫后,返回給user2,user2接收轉換后的字符串并輸出。

User1 和user2 通過套接字方式通信時,若用戶user1 或user2 對套接字文件a.socket 無讀寫權限時,程序執行將會出錯。

5 結束語

命名管道和套接字文件是Linux 系統中的重要文件類型,利用命名管道和套接字可以實現不同用戶進程之間的通信,并且可以使用Linux 系統文件的鑒權。本文通過命名管道和套接字文件,分析不同用戶的進程通信時,借用文件系統鑒權機制的實例,幫助學生深入理解Linux系統。

猜你喜歡
進程用戶
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
Camera360:拍出5億用戶
創業家(2015年10期)2015-02-27 07:55:08
100萬用戶
創業家(2015年10期)2015-02-27 07:54:39
如何獲取一億海外用戶
創業家(2015年5期)2015-02-27 07:53:25
我國高等教育改革進程與反思
教育與職業(2014年7期)2014-01-21 02:35:04
Linux僵死進程的產生與避免
男女平等進程中出現的新矛盾和新問題
主站蜘蛛池模板: 欧美色图久久| 久久这里只有精品国产99| 99在线免费播放| 日a本亚洲中文在线观看| 亚洲国产精品日韩av专区| 天天操天天噜| 一级爱做片免费观看久久| 婷婷亚洲视频| 欧美成人第一页| 婷婷亚洲视频| 国产免费人成视频网| 一本一道波多野结衣一区二区 | 无码免费的亚洲视频| 在线日韩一区二区| 四虎影视8848永久精品| 天堂亚洲网| 在线日韩日本国产亚洲| 黄片一区二区三区| 欧美一级在线播放| 色AV色 综合网站| 一本无码在线观看| 色噜噜在线观看| 日韩av资源在线| 国产午夜精品一区二区三| 呦女亚洲一区精品| 国产特级毛片| 成人免费网站久久久| 精品国产中文一级毛片在线看 | 伊人色在线视频| 亚洲精品少妇熟女| 67194亚洲无码| 波多野结衣在线se| 日韩在线成年视频人网站观看| 日韩国产另类| 久久婷婷五月综合97色| 亚洲色婷婷一区二区| 国产精品久久久久无码网站| 日韩东京热无码人妻| 91香蕉视频下载网站| 亚洲一区二区精品无码久久久| 国产午夜人做人免费视频| 久久人人97超碰人人澡爱香蕉 | 亚洲一级无毛片无码在线免费视频| 亚洲人成色77777在线观看| 欧洲日本亚洲中文字幕| 国产亚洲精品自在久久不卡| 伊人久热这里只有精品视频99| 国产SUV精品一区二区6| 青青国产成人免费精品视频| 亚洲天堂久久| 狠狠亚洲婷婷综合色香| 欧美色综合网站| 日韩性网站| 在线免费观看AV| 亚洲天堂网在线视频| 视频国产精品丝袜第一页| 国产青榴视频在线观看网站| 久久永久免费人妻精品| 老熟妇喷水一区二区三区| 婷婷成人综合| 99久久精品免费观看国产| 欧美精品一二三区| 亚洲无码精品在线播放| 国产办公室秘书无码精品| 亚洲床戏一区| 亚洲人免费视频| 色偷偷综合网| 精品天海翼一区二区| 久久综合九九亚洲一区| 国产色网站| 久草视频精品| 国产激情无码一区二区三区免费| 午夜在线不卡| 中文无码日韩精品| 在线免费看片a| 亚洲欧洲日产国产无码AV| 免费观看成人久久网免费观看| 亚洲AⅤ永久无码精品毛片| 欧美中文字幕在线二区| 午夜不卡视频| 國產尤物AV尤物在線觀看| 玖玖免费视频在线观看|