|
比如这个程序,谢谢
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <sys/stat.h>
union semun
{
int val;
struct semid_ds *buf;
unsigned short *array;
}arg;
//生成信号量
int sem_creat(key_t key)
{
union semun semopts;
int semid;
semopts.val = 0;
semid = semget(key, 1, IPC_CREAT|0666);
if (semid == -1)
{
printf("creat semaphore error\n");
exit(-1);
}
semctl(semid, 0, SETVAL, semopts); //信号量初始化
return semid;
}
main()
{
key_t key;
union semun sem;
int semid, shmid;
int *shm;
long int i;
int size;
size = sizeof(long int);
key = ftok("./3",0);
shmid = shmget(key, size, IPC_CREAT|S_IRUSR|S_IWUSR);
if (shmid == -1)
{
perror("failed to create/get shm");
return -1;
}
shm = shmat(shmid, 0, 0);
semid = sem_creat(key);
struct sembuf sem_get = {0,+1,IPC_NOWAIT};
semop(semid,&sem_get,1);
for(i = 0;i<5000000;i++)
{
*shm += 1;
}
printf("%d\n",*shm);
struct sembuf sem_release = {0,-1,IPC_NOWAIT};
semop(semid,&sem_release,1);
shmdt(shm);
}
他需要守护进程模式. |
|