IPC之SystemV

svipc - System V interprocess communication mechanisms

linux實現的System V interprocess communication (IPC)機制包含消息隊列(message queues),信號集(semaphore sets),和共享內存(shared memory segments)。

man 7 svipc

在新的應用中很少會用到System V IPC,因為它已經被POSIX IPC取代了。但編寫老程序時仍可能用到。

像管道一樣,IPC存在于內核(實際上是內核內存)而不是像FIFO一樣存在于文件系統中。IPC的集中結構有時合起來叫做IPC對象(其實是信號燈、消息隊列和共享內存)。

?每個對象都通過它的標識符來引用和訪問,標識符是一個正整數,它唯一地標識出對象本身和它的類型。每個標識符的類型都是唯一的,但同一標識符的值可以用于一個消息隊列、一個信號燈和一個共享內存區。標識符稱為該結構上所有其他操作的句柄。IPC結構標識符不想文件描述符那樣使用較小的正整數。實際上,隨著結構的創建和刪除,標識符的值(正式的名稱叫做槽使用順序號)會不斷增加直至達到一個最大值為止,然后再轉回到0并重新開始。在linux系統中,標識符聲明為整數,所以它的值最大可能為65535。

? ? ?每個IPC結構都有get函數創建,在創建了一個IPC機構之后,使用同一個關鍵字(key)的get函數的后續調用不會創建新結構,但返回和現在結構相關的標識符。這可以讓兩個或兩個以上的進程用同一關鍵字key調用get函數以建立一條IPC通道。

? ? 接下來的問題是怎樣確保所有要使用同一IPC結構的進程都使用相同的關鍵字。一種方法為,實際創建結構的進程給get函數傳遞IPC_PRIVATE關鍵字,這能保證創建一個新結構。然后創建IPC結構的進程把返回的標識符保存在其他進程能夠訪問的文件系統中。在父進程fork或exec一個子進程的場合,父進程可以把返回的標識符作為一個參數傳遞給創建子進程的函數exec。

? ? ?另一種傳遞關鍵字的方法是把它保存在公共的頭文件中,這樣一來所有包含了這個頭文件的程序都能夠訪問到相同的關鍵字。這種方法引出的一個問題,沒有進程直到它是正在創建一個新結構呢還是只訪問已經由其他進程創建好的結構。這種方法帶來的另外一個問題是關鍵字可能已經被另外一個無關的程序使用了。結果使用這個關鍵字的進程必須包含處理這種可能性的代碼。

? ? ?第三種方法是用ftok函數,這個函數接受一個路徑名和一個稱為項目標識符的單個字符作為參數,返回一個關鍵字可以傳遞給get函數。有程序員保證所有的進程實現直到路徑名和項目標識符。你可以使用前面提到過的方法之一:在公共的頭文件中包含路徑名和項目標識符,或者把他們保存在預定義的配置文件中。

? ? 不幸的是,ftok有個嚴重的缺陷:它不能保證產生唯一的關鍵字,這一來出現了和前面討論的第二種方法一樣的問題。在下列情況下,ftok生成唯一的關鍵字:

>>當兩個不同的符號鏈接到同一文件上。

>>當路徑名的索引節點的前16個比特位具有相同的值。

>>當系統帶有兩個相同次設備號的硬盤時,在系統由多個磁盤控制器的情況下才會出現。主設備號不相同,但次設備號可以相同。

考慮到linux的ftok實現有弱點,所以強烈建議讀者不使用它并且忽略它。

System V IPC有幾個缺點,第一,和它提供的好處相比,其編程接口過于復雜。第二,IPC結構比其他資源,比如系統能夠支持的文件數量或系統允許的活動進程數目等受到的限制大的多。第三,盡管是一種受限資源,但IPC結構卻沒有保留一個引用計數(它是一個記錄使用結構的進程數目的計數器),因此System V IPC沒有回收被丟棄的IPC結構的自動機制。最后,如前面所述,IPC結構只存在于內核中,文件系統不知道他們。因此,對他們的I/O操作需要學習另外一種編程接口。沒有文件描述符,你不能通過系統調用select使用多路復用的I/O。如果進程需要等待IPC結構上的I/O操作,它必須使用某種忙等待循環。一個忙等待循環--持續檢查某些變化條件的循環--幾乎在任何時刻都是一種糟糕的編程習慣,因為它不必要的消耗了CPU周期。在linux下,忙等待循環特別有害,有幾種方法,比如阻塞I/O、使用系統調用select和信號來實現非忙等待的循環。

推薦使用POSIX IPC

轉載于:https://www.cnblogs.com/embedded-linux/p/5080011.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373893.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373893.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373893.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle create user

sqlplus /nolog conn sys/pw123456orcl as sysdba CREATE USER zengwenfeng IDENTIFIED BY zengwenfeng ; GRANT ALL PRIVILEGES TO zengwenfeng ; COMMIT; C:\Users\Administrator>sqlplus /nologSQL*Plus: Release 11.2.0.1.0 Production on 星期日 12月 24 21:38:24 20…

具有GlassFish和一致性的高性能JPA –第2部分

在我的四部分系列的第二部分中,我將解釋將Coherence與EclipseLink和GlassFish一起使用的策略第一。這描述了配置Coherence的JPA支持的Cache所必須采取的步驟,以及如何在GlassFish中使用它。高性能數據存儲。 一般的做法 您可以將Coherence API與通過JPA映…

arm板telnetd為什么運行不了_一種基于ARM的嵌入式系統開發的方案詳細講解

背景介紹在日益信息化的社會中,各種各樣的嵌入式系統已經全面滲透到日常生活的每一個角落。嵌入式系統的功能越來越復雜,這就使得一個嵌入式系統產品從市場需求立項到方案選擇、樣機研制、定型量產所需要的開發費用越來越多,所需開發時間越來…

反素數 -- 數學

反素數就是區間內約數個數最多的那個數。 在ACM題目里, 一般是求約數最多而且數字最小的那個數,【1--n】 二是求約數剛好等于n的最小的那個數 三是求區間里的最小反素數【beign,end】 1和3有區別嗎?有,1可以加速&#…

編程挑戰系統的輸入和輸出詳細說明

在高校俱樂部線上編程挑戰中,一道題目的所有測試數據是放在一個文本文件中,選手將一道題目的程序提交給評判系統運行,程序從該文件中讀取測試數據,再把運行結果輸出到另一個文本文件中。系統把輸出文件與標準答案比對,…

上傳文件---未能找到路徑“D:\MyProject\Files\”的一部分

C# 使用控件FileUpload 上傳文件,簡單實例: protected void btnUpload_Click(object sender, EventArgs e){string path Server.MapPath("~/Files/");if (fileUpload.HasFile true){string filename fileUpload.FileName.ToLower();fileUpl…

使用SPANN方式將Spring&Quartz與自定義注釋集成

在上一篇文章中 ,我們演示了如何在Spring容器中創建和配置帶批注的Quartz作業。 我們使用了一個類級別的注釋將一些元數據添加到實現Quartz Job的bean中。 批注定義了作業的名稱,組及其cron表達式。 后來,大部分代碼專用于處理該批注&#xf…

python opencv旋轉_Python opencv實現與rotatedrect類似的矩形旋轉,pythonopencv,RotatedRect

本文原理:先旋轉矩形到指定角度,然后提取矩形外輪廓,從而獲取旋轉后的矩形坐標點。#!/usr/bin/env python3# -*- coding: utf-8 -*-# Author: tcy# Date: 2020-5-2 21:00:53# Version:V1.01# Last Modified by: tcy shanghai song…

關于string轉整數

又是leetcode的easy級別題,很基本的題目,卻漏考慮很多情況,動手前一定要考慮清楚呀!!! 就當做鍛煉寫作能力吧,先上題目! 將文本轉換成整數,注意一下幾點: 1.文…

數字三角形——遞歸、遞推、記憶化搜索

數字三角形 描述: 有一個由非負整數組成的三角形,第一行只有一個數,除了最下行之外每個數的左下方和右下方各有一個數。 問題: 從第一行的數開始,每次可以往左下或右下走一格,直到走到最下行…

Java 7功能概述

前面我們討論了所有未納入Java 7的內容,然后回顧了將其納入Java 7的有用的Fork / Join框架 。 今天的帖子將帶我們了解Project Coin的每個功能-一系列小的語言增強功能,這些功能雖然不是開創性的,但是對于任何能夠使用JDK 7的開發人員來說都是…

緩存技術

提升系統性能的主要方式之一就是緩存。它可以擋掉大部分的數據庫訪問的沖擊,如果沒有它,系統很可能會因為數據庫不可用導致整個系統崩潰。 但是緩存帶來了另外一些棘手的問題: 數據的一致性和實時性。 例如,數據庫中的數據狀態已經…

水晶報表分組分欄_web報表可視化設計器工具推薦

古往今來,信息就是決勝的關鍵。在科技時代的今天亦是如此。企業的數據管理在幫助企業加強管控、提高競爭力等方面具有不可或缺的作用。這就不得不說到報表工具。企業想要將儲存于各種商業信息系統中的數據轉化成有用的信息,最終幫助決策者做出更快、更好…

嵌套矩形——DAG上的動態規劃

有向無環圖(DAG,Directed Acyclic Graph)上的動態規劃是學習動態規劃的基礎。很多問題都可以轉化為DAG上的最長路、最短路或路徑計數問題。 題目描述: 有n個矩形,每個矩形可以用兩個整數a,b描述,表示它的長和寬。矩形…

Twisted

Twisted定義Twisted是一個基于事件驅動的網絡引擎框架網絡框架,別人預先定義好的一個框架(一個項目),如.net某個web框架有25個class,從BeginRequest依次執行類里的process方法,程序員自己定義一個類&#x…

從Spring到Java EE 6

我最近在一個非常復雜的項目中工作,其中融合了許多Java EE 6技術(例如JPA,JAXB,JMS,JTA,JAX-RS等)。 出于生產力和計劃方面的原因,將原型應用程序設計為獨立的純Spring應用程序。 當…

Centos 6.5 搭建php環境(nginx+mariadb+php7)

1.mariaDb vim /etc/yum.repos.d/MariaDB.repo [mariadb] name MariaDB baseurl http://yum.mariadb.org/5.5/centos5-x86 gpgkeyhttps://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck1#如果服務器已經安裝了MariaDB-Galera-server包,你可能需要在安裝MariaDB-s…

MAC itunes無法驗證服務器s.mzstatic/itunes無法更新服務器解決方案

打開host文件: 一、用終端打開: sudo vi /etc/hosts 輸入完這行命令后需要輸入電腦密碼,然后確認,進入host文件 然后按i鍵進入編輯模式,在最后一行添加:23.214.233.166 s.mzstatic.com 如下圖 添加完后&…

硬幣問題——固定終點的最長路和最短路

問題描述&#xff1a; 有n種硬幣&#xff0c;面值分別為V1,V2...,Vn,每種都有無限多。給定非負整數S&#xff0c;可以選用多少個硬幣&#xff0c;使得面值之和恰好為S&#xff1f;輸出硬幣數目的最小值和最大值。0 < n < 100, 0 < S < 10000, 1 < Vi < S。 …

讀取nas_NAS怎么玩?除了存放小姐姐,它竟然還有這些功能

自從有了電腦&#xff0c;就一直在折騰"存儲那點事兒"&#xff0c;說到底&#xff0c;電腦的本質就是存儲&#xff0c;而自己弄家用存儲方面的東西算下來也有幾年了。單機的硬盤存儲比較簡單&#xff0c;但是隨著家里各種設備的增多&#xff0c;各個設備間的文件共享…