成熟丰满熟妇高潮XXXXX,人妻无码AV中文系列久久兔费 ,国产精品一国产精品,国精品午夜福利视频不卡麻豆

您好,歡迎來到九壹網(wǎng)。
搜索
您的當前位置:首頁POSIX 進程間通信 (可移植操作系統(tǒng)接口)

POSIX 進程間通信 (可移植操作系統(tǒng)接口)

來源:九壹網(wǎng)

1、什么是POSIX標準

Portable Operating System Interface for Computing System.

他是一個針對操作系統(tǒng)(準確地說是針對類Unix操作系統(tǒng))的標準化協(xié)議。

這個協(xié)議是對操作系統(tǒng)服務接口的標準化,從而保證了應用程序在源碼層次的可移植性。

如今主流的Linux系統(tǒng)都做到了兼容POSIX標準。

2、POSIX標準的C/C++庫

C/C++的標準庫是指ANSI C/C++定義的標準庫,這個是構(gòu)成標準C/C++語言的基礎。簡稱libc/libc++,常見的libc/libc++的實現(xiàn)有:UNIX C/C++,GUN C/C++,MicroSoft Visual C/C++
在標準C/C++庫基礎上,兼容POSIX協(xié)議的C/C++庫就是POSIX標準的C/C++庫,這些C/C++庫可以直接操作符合POSIX標準的操作系統(tǒng)調(diào)用。
常見的POSIX標準C/C++庫有:
2.1 BSD,這個庫是AOSP使用的標準C庫。
2.2 Bionic,這個是BSD的衍生庫,用于NDK開發(fā)
2.3?UNIX C/C++,GUN C/C++,MicroSoft Visual C/C++

POSIX 進程間通信 (Interprocess Communication, IPC) 是 System V 進程間通信的變體。它是在 Solaris 7 發(fā)行版中引入的。與 System V 對象類似,POSIX IPC 對象的屬主、屬主的組以及其他用戶具有讀取和寫入權限,但是沒有執(zhí)行權限。POSIX IPC 對象的屬主無法將對象分配給其他屬主。POSIX IPC 包括以下功能:

  • 消息允許進程將已格式化的數(shù)據(jù)流發(fā)送到任意進程。

  • 信號量允許進程同步執(zhí)行。

與 System V IPC 接口不同,POSIX IPC 接口均為多線程安全接口。

POSIX 消息

下表中列出了 POSIX 消息隊列接口。

表?7-2 POSIX 消息隊列接口

接口名稱
目的
連接到以及(可選)創(chuàng)建命名消息隊列
結(jié)束到開放式消息隊列的連接
結(jié)束到開放式消息隊列的連接,并在最后一個進程關閉此隊列時將其刪除
將消息放入隊列
在隊列中接收(刪除)最早且優(yōu)先級最高的消息
通知進程或線程消息已存在于隊列中
、
設置或獲取消息隊列屬性

POSIX 信號量

POSIX 信號量比 System V 信號量輕得多。POSIX 信號量結(jié)構(gòu)定義單個信號量,而不是定義最多包含 25 個信號量的數(shù)組。

POSIX 信號量接口如下所示。

連接到以及(可選)創(chuàng)建命名信號量

初始化信號量結(jié)構(gòu)(在調(diào)用程序內(nèi)部,因此不是命名信號量)

結(jié)束到開放式信號量的連接

結(jié)束到開放式信號量的連接,并在最后一個進程關閉此信號量時將其刪除

初始化信號量結(jié)構(gòu)(在調(diào)用程序內(nèi)部,因此不是命名信號量)

將信號量的值復制到指定整數(shù)中

、

當其他進程擁有信號量時進行阻塞,或者當其他進程擁有信號量時返回錯誤

遞增信號量計數(shù)

POSIX 共享內(nèi)存

POSIX 共享內(nèi)存實際上是映射內(nèi)存的變體(請參見)。二者的主要差異在于:

  • 打開共享內(nèi)存對象應使用?,而不是通過調(diào)用?。

  • 關閉和刪除對象應使用?,而不是通過調(diào)用?,此調(diào)用不刪除對象。

?中的選項數(shù)實際上少于??中提供的選項數(shù)。

?

P

?

DESCRIPTION

共享內(nèi)存是最快的可用IPC形式。它允許多個不相關(無親緣關系)的進程去訪問同一部分邏輯內(nèi)存。

要注意的是共享內(nèi)存本身沒有提供任何同步功能。也就是說,在第一個進程結(jié)束對共享內(nèi)存的寫操作之前,并沒有什么自動功能能夠預防第二個進程開始對它進行讀操作。共享內(nèi)存的訪問同步問題必須由程序員負責??蛇x的同步方式有互斥鎖、條件變量、讀寫鎖、紀錄鎖、信號燈。

實際上,進程之間在共享內(nèi)存時,并不總是讀寫少量數(shù)據(jù)后就解除映射,有新的通信時,再重新建立共享內(nèi)存區(qū)域。而是保持共享區(qū)域,直到通信完畢為止。

?

POSIX Shared Memory API

使用POSIX共享內(nèi)存需要用到下面這些API:

#include <sys/types.h>
#include <sys/stat.h>        /* For mode constants */
#include <sys/mman.h>
#include <fcntl.h>           /* For O_* constants */
#include <unistd.h>

int shm_open(const char *name, int oflag, mode_t mode);
int shm_unlink(const char *name);
int ftruncate(int fildes, off_t length);
void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
int munmap(void *addr, size_t len);
int close(int fildes);
int fstat(int fildes, struct stat *buf);
int fchown(int fildes, uid_t owner, gid_t group);
int fchmod(int fildes, mode_t mode);

shm_open

穿件并打開一個新的共享內(nèi)存對象或者打開一個既存的共享內(nèi)存對象, 與函數(shù)open的用法是類似的. 函數(shù)返回值是一個文件描述符,會被下面的API使用.

ftruncate

設置共享內(nèi)存對象的大小,新創(chuàng)建的共享內(nèi)存對象大小為0.

mmap

munmap

shm_unlink

刪除一個共享內(nèi)存對象名字.

close

當shm_open函數(shù)返回的文件描述符不再使用時,使用close函數(shù)關閉它.

fstat

獲得共享內(nèi)存對象屬性的stat結(jié)構(gòu)體. 結(jié)構(gòu)體中會包含共享內(nèi)存對象的大小(st_size), 權限(st_mode), 所有者(st_uid), 歸屬組 (st_gid).

fchown

改變一個共享內(nèi)存對象的所有權.

fchmod

改變一個共享內(nèi)存對象的權限.

?

Persistence(持續(xù)性)

POSIX 共享內(nèi)存隨內(nèi)核持續(xù):?共享內(nèi)存對象會一直存在,直到系統(tǒng)關閉 或者 一個進程取消內(nèi)存映射(unmapped)并且調(diào)用shm_unlink來刪除共享內(nèi)存對象.

Linking(鏈接庫)

必須鏈接rt(librt)庫,也就是real-time library.

-lrt

?

Accessing shared memory objects via the file system

Linux從內(nèi)核2.4 和glibc 2.2版本開始支持POSIX共享內(nèi)存.

?

從Linux內(nèi)核2.6.19版本起, Linux支持使用訪問控制列表(ACLs) 來控制虛擬文件系統(tǒng)中對象的權限.

?

Inherit

to be continued...

?

CONFORMING TO(遵守的彼岸準)

POSIX.1-2001.

?

NOTES

多進程必須使用同步機制來訪問共享內(nèi)存對象, 比如使用POSIX信號量.

System V 的共享內(nèi)存是過時的, POSIX共享內(nèi)存提供了使用更簡單、設計更合理的API.

?

轉(zhuǎn)載于:https://www.cnblogs.com/klb561/p/9286314.html

因篇幅問題不能全部顯示,請點此查看更多更全內(nèi)容

Copyright ? 2019- 91gzw.com 版權所有 湘ICP備2023023988號-2

違法及侵權請聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市萬商天勤律師事務所王興未律師提供法律服務