📄 client_sm.c
字号:
#include <stdio.h>
#include <string.h>
#include <sys/shm.h>
#include <sys/sem.h>
#define MEM_KEY 99
#define SEM_KEY 9900
#define SEG_SIZE 512
#define BUFF_SIZE 256
int main()
{
int seg_id;
int semset_id;
char *mem_ptr;
struct sembuf action;
seg_id = shmget(MEM_KEY,SEG_SIZE,IPC_CREAT|0777);
if(seg_id==-1)
{
printf("shmget error!\n");
return -1;
}
mem_ptr = shmat(seg_id,NULL,0);
if(mem_ptr == (void*)-1)
{
printf("shmat error!\n");
return -1;
}
semset_id = semget(SEM_KEY,1,0);
if(semset_id==-1)
{
printf("semget error!\n");
return -1;
}
semctl(semset_id,0,SETVAL,0);
unsigned int i = 1;
char buf[BUFF_SIZE] = {0};
FILE* fp = fopen("./data.txt","r");
fread(buf,sizeof(char),BUFF_SIZE-1,fp);
action.sem_num = 0;
action.sem_flg = SEM_UNDO;
action.sem_op = 0;
while(i<100000)
{
semop(semset_id,&action,1);
memcpy(mem_ptr,buf,BUFF_SIZE);
action.sem_op = +1;
semop(semset_id,&action,1);
i++;
}
printf("i = %ld\n",i);
shmctl(seg_id,IPC_RMID,NULL);
semctl(semset_id,0,IPC_RMID,NULL);
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -