📄 shm_c.cpp
字号:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <time.h>#include <sys/shm.h>#include <sys/sem.h>#include <sys/ipc.h>#define SEGSIZE 1024
#define READTIME 1union semun {
int val;
struct semid_ds *buf;
unsigned short *array;
} arg;
// 打印程序执行时间
void out_time(void)
{
static long start = 0;
time_t tm;
if (0 == start){
tm = time(NULL);
start = (long)tm;
printf(" now start ...\n");
}
printf(" second: %ld \n",(long)(time(NULL)) - start);
}
//创建信号量
int new_sem(key_t key)
{
union semun sem;
int semid;
sem.val = 0;
semid = semget(key,0,0);
if (-1 == semid){
printf("create semaphore error\n");
exit(-1);
}
return semid;
}
//等待信号量变成0
void wait_v(int semid)
{ int ret; struct sembuf sops={0,0,0}; printf("shm_c-wait_v():before semop(),time=%ld ...\n",time(NULL)); ret=semop(semid,&sops,1); printf("shm_c-wait_v():after semop(),ret=%d,time=%ld ...\n",ret,time(NULL));}
int main(void)
{
key_t key;
int shmid,semid;
char *shm;
char msg[100];
char i;
printf("======= Run Client Program ===========\n"); key = ftok("./",0);
shmid = shmget(key,SEGSIZE,0);
if(-1 == shmid){
printf(" create shared memory error\n");
return -1;
}
shm = (char *)shmat(shmid,0,0);
if (-1 == (int)shm){
printf(" attach shared memory error\n");
return -1;
}
semid = new_sem(key);
for (i = 0;i < 3;i ++){
sleep(2);
wait_v(semid);
printf("Message geted is: %s \n",shm + 1);
out_time();
}
shmdt(shm);
return 0;
}
//编译服务端程序:
//gcc -o shm_c shm_c.c -g
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -