目的:配合共享記憶體完成程序間通訊;
使用框架:
key ==>申請訊號量集 ==》pv操作 ===》解除安裝刪除訊號量集
semget() semop() semctl()
1、申請訊號量
#include
int semget(key_t key, int nsems, int sem***);
功能:該函式可以使用特定的key向核心提出訊號量集使用申請;
引數:key 唯一鍵值
nsems 要申請的訊號量個數;
sem*** 申請訊號量的方式,ipc_creat ipc_excl
返回值:成功 semid 訊號量集id
失敗 -1;
2、pv操作:
p 操作: 申請資源 sem_wait() ===>sem = sem -1;
v 操作: 釋放資源 sem_post() ===>sem = sem +1;
int semop(int semid, struct sembuf sops, unsigned nsops);
功能:該函式可以完成訊號量集中指定訊號量的pv操作;
引數: semid 訊號量集id
sops 訊號量集針對pv操作組織的結構體:如下
struct sembuf
nsops 操作訊號量的個數;
返回值:成功 0
失敗 -1;
3、刪除訊號量:
int semctl(int semid, int semnum, int cmd, …);
功能:該函式可以修改訊號量集合中指定訊號量的屬性,也可以刪除訊號量;
引數:semid 要刪除的訊號量集id
semnum 要刪除的訊號量集中的訊號量編號
cmd ipc_rmid 刪除訊號量的巨集
… 可變長引數,取決與cmd 的巨集,一般猶如下兩個巨集:
cmd == setval 則 可變長部分可以傳入乙個初始值
cmd == getval 則 可變長部分可以不傳資料,函式執行
的返回值就是獲取值
返回值:成功 0
失敗 -1;
//訊號燈寫
#include
#include
#include
#include
#include
#include
#include
#define n 32
struct shmbuf
;union semun
;int
main()
int shmid;
struct shmbuf *shm;if(
(shmid=
shmget
(key,
512,ipc_creat|ipc_excl|
0664))
<0)
else}if
((shm=
shmat
(shmid,
null,0
))!=null
)int semid;
union semun semun;
struct sembuf sembuf;if(
(semid=
semget
(key,
2,ipc_creat|ipc_excl|
0664))
<0)
else
}else
while(1
)}return0;
}
//訊號燈讀
#include
#include
#include
#include
#include
#include
#include
#define n 32
struct shmbuf
;union semun
;int
main()
int shmid;
struct shmbuf *shm;if(
(shmid=
shmget
(key,
512,ipc_creat|ipc_excl|
0664))
<0)
else}if
((shm=
shmat
(shmid,
null,0
))!=null
)int semid;
union semun semun;
struct sembuf sembuf;if(
(semid=
semget
(key,
2,ipc_creat|ipc_excl|
0664))
<0)
else
}else
while(1
)printf
("buf:%s\n"
,shm->buf)
;//釋放訊號量
sembuf.sem_num=1;
sembuf.sem_op=1;
sembuf.sem_***=0;
semop
(semid,
&sembuf,1)
;}return0;
err:
shmdt
(shm)
;shmctl
(shmid,ipc_rmid,
null);
shmctl
(semid,
0,ipc_rmid)
;shmctl
(semid,
1,ipc_rmid)
;}
Linux程序間通訊 IPC 學習筆記。
ipc interprocess communication 程序間通訊 一 管道 1.無名管道 開啟與關閉管道 include int pipe int filedes 2 filedes 0 用於讀出資料,讀取時必須關閉寫入端,即close filedes 1 filedes 1 用於寫入資料,...
IPC物件之訊號量
1.訊號量 1 訊號量 semaphore 也叫訊號燈。它是不同程序間或乙個給定程序內部不同執行緒間同步的機制。2 二值訊號量 值為0或1。與互斥鎖類似,資源可用時值為1,不可用時值為0。3 計數訊號量 值在0到n之間。同來統計資源,其值代表可用資源數。4 等待操作是等待訊號量的值變為大於0,然後將...
Linux學習筆記29 IPC狀態命令
一 ipc ipc是程序間通訊,在前面,我們相繼學習了程序間通訊機制有訊號量,記憶體共享,訊息佇列。狀態命令 ipcs 和刪除命令 ipcrm 提供了一種檢查和清理ipc機制的方法。二 狀態命令 1 顯示訊號量狀態用ipcs s 2 顯示共享記憶體狀態用ipcs m 3 顯示訊息佇列狀態用ipcs ...