這裡的訊號量主要是在不同的程序之間使用。
需要四個操作
p操作v操作
以及通過semctl呼叫command引數設定setval來初始化訊號量,在使用訊號量之前必須要這麼做.
並且可以通過semctl呼叫command設定為ipc_rmid來刪除訊號量id:
因為庫里沒有定義union semun,因此需要自己定義.
用到訊號量的三個函式
semget 用來建立乙個新訊號量或者取得乙個已有訊號量的鍵
semop 用來改變訊號量的值
semctl 用來直接控制訊號量資訊,比如semop之前必須先用semctl給個初值
#include
#include
#include
#include
union semun
;static
int set_semvalue(void);
static
void del_semvalue(void);
static
int semaphore_p(void);
static
int semaphore_v(void);
static
int sem_id;
static
int set_semvalue(void)
static
void del_semvalue(void)
static
int semaphore_p(void)
static
int semaphore_v(void)
//main function
int main(int argc,char *agrv)
for(i=0;i<10;i++)
printf("\n%d - finished\n",getpid());
if(argc>1)
exit(0);
}
jiang@ubuntu:~/mytest
./sem1 1 &
[1] 12839
jiang@ubuntu:~/mytest
./sem1
ooxxooxxooxxooxxoo***xooxxooxxooxxooxxoo
12839 - finished
12840 - finished
jiang@ubuntu:~/mytest$
linux下程序間通訊
linux下程序間通訊的幾種主要手段簡介 管道 pipe 及有名管道 named pipe 管道可用於具有親緣關係程序間的通訊,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊 訊號 signal 訊號是比較複雜的通訊方式,用於通知接受程序有某種事件發...
Linux下程序間通訊
linux下的程序通訊基本上是從unix平台上的程序通訊繼承來的。而對unix發展做出最大貢獻的倆大主力at t的貝爾實驗室及bsd 加州大學伯克利分校的伯克利軟體發布中心 在程序的通訊方面的側重點有所不同。前者是對unix早期的程序間通訊手段進行了系統的改進和擴充,形成了 system v ipc...
linux程序間通訊的方法
程序間通訊主要包括管道,系統ipc 包括訊息佇列,訊號量,共享儲存 socket.管道包括三種 1 普通管道pipe,通常有種限制,一是半雙工,只能單向傳輸 二是只能在父子程序間使用.2 流管道s pipe 去除了第一種限制,可以雙向傳輸.3 命名管道 name pipe,去除了第二種限制,可以在許...