?? 創(chuàng)建信號量.txt
字號:
/* Creat the semaphore */
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/stat.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#define flag1 IPC_CREAT|IPC_EXEL|00666
#define flag2 IPC_CREAT|00666
#define max_tries 3
union semnu{
int val;
struct semid_ds * buf;
ushort_t * array;
}sem;
int main(key_t key,int i,int j){
union semnu sem;
int semid;
int tmperrno;
int init_ok=0;
int k;
struct semid_ds sem_info;
sem.val=j;
semid=semget(key,i,flag1);
if(semid==-1){
tmperrno=errno;
if(tmperrno==EEXIST){
semid=semget(key,i,flag2);
sem.buf=&sem_info;
for(k=0;k<max_tries;k++){
if(semctl(semid,0,IPC_STAT,sem)==-1){
fprintf(stderr,"Control Semaphore Error:[%s]\n",sererror(errno));
k=max_tries;
}
else{
if(sem.buf->sem_otime!=0){
k=max_tries;
init_ok=1;
}
else
sleep(1);
}
}
if(!init_ok){
if(semctl(semid,0,SETVAL,sem.val)==-1)
fprintf(stderr,"Initiate Semaphore Error:[%s]\n",strerror(errno));
}
else
printf("semget error,process exit")
}
else{
if(semctl(semid,0,SETVAL,sem)==-1)
printf("semctl setval error");
}
printf("process [%d] creat semaphore [%d]\n",getpid(),semid);
return semid;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -