头文件:
#include<sys/ipc.h>
#include<sys/shm.h>
例子
#include<stdio.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h>
#include<string.h>
static char msg[]="你好!共享内存!";
union semun{
int val;
struct semid_ds *buf;
unsigned short *array;
};
int creatsem(key_t key,int value)
{
union semun sem;
int semid;
sem.val=value;
semid=semget(key,1, IPC_CREAT);
semctl(semid,0,SETVAL,sem);
return semid;
}
void Sem_P(int semid)
{
struct sembuf sem={0,-1,IPC_NOWAIT};
semop(semid,&sem,1);
}
void Sem_V(int semid)
{
struct sembuf sem={0,+1,IPC_NOWAIT};
semop(semid,&sem,1);
}
void DESTROY(int semid)
{
union semun sem;
sem.val=0;
semctl(semid,0,IPC_RMID,sem);
}
int main()
{
key_t key;
int semid,shmid;
char i,*shms,*shmc;
struct semid_ds buf;
int value=0;
char buffer[80];
pid_t p;
key=ftok("/home/18",'a');
shmid=shmget(key,1024,IPC_CREAT); //创建共享1024个字节的共享内存
semid=creatsem(key,0);
p =fork();
if(p>0) //父进程
{
shms=(char*)shmat(shmid,0,0); /*挂接共享内存*/
memcpy(shms,msg,strlen(msg)+1); //复制到共享内存
sleep(10);
Sem_V(semid);
shmdt(shms); //销毁共享内存
DESTROY(semid);
}
else if(p==0) //子进程
{
shmc=(char *)shmat(shmid,0,0); //挂接共享内存
Sem_P(semid);
printf("共享内存的值为:%s\n",shmc);
shmdt(shms); //销毁共享内存
}
return 0;
}