#include <myhead.h>
int main(int argc, const char *argv[])
{
key_t key =ftok("./05v.c",1);
if(key<0)
{
ERR_MSG("ftok");
}
int shmid = shmget(key,32,IPC_CREAT|0664);//创建共享内存
if(shmid<0){
ERR_MSG("shmid");
}
void *addr = shmat(shmid,NULL,0);//映射到用户空间
if((void*)-1==addr)
{
ERR_MSG("shmat");
}
int semid = semget(key,2,IPC_CREAT|0664);//创建信号灯集
if(semid<0){
ERR_MSG("semget");
}
char *p1=(char*)addr;
strcpy(p1,"1234567");//共享内存赋值
//设置信号灯集0号灯初始值
unsigned int setval=1;
if(semctl(semid,0,SETVAL,setval)<0)
{
ERR_MSG("semctl");
}
struct sembuf sops[2];
sops[0].sem_num =0;
sops[0].sem_op = -1;//P操作
sops[0].sem_flg = 0;
sops[1].sem_num =1;
sops[1].sem_op = 1;//V操作
sops[1].sem_flg = 0;
while(1){
if(semop(semid,&sops[0],1)<0)
{
ERR_MSG("semop");
}else{
// sleep(1);
printf("%s\n",p1);
}
semop(semid,&sops[1],1);
}
return 0;
}
#include <myhead.h>
int main(int argc, const char *argv[])
{
key_t key =ftok("./05v.c",1);
if(key<0)
{
ERR_MSG("ftok");
}
int shmid = shmget(key,32,IPC_CREAT|0664);//创建共享内存
if(shmid<0){
ERR_MSG("shmid");
}
void *addr = shmat(shmid,NULL,0);//映射到用户空间
if((void*)-1==addr)
{
ERR_MSG("shmat");
}
char *p1=(char*)addr;
strcpy(p1,"1234567");
int semid = semget(key,2,IPC_CREAT|0664);//创建信号灯集
if(semid<0){
ERR_MSG("semget");
}
struct sembuf sops[2];
sops[0].sem_num =1;
sops[0].sem_op = -1;//P操作
sops[0].sem_flg = 0;
sops[1].sem_num =0;
sops[1].sem_op = 1;//V操作
sops[1].sem_flg = 0;
while(1){
if(semop(semid,&sops[0],1)<0)
{
ERR_MSG("semop");
}
for(int i=0;i<strlen(p1)/2;i++){
char t=*(p1+i);
*(p1+i)=*(p1+strlen(p1)-1-i);
*(p1+strlen(p1)-1-i)=t;
}
semop(semid,&sops[1],1);
}
return 0;
}