📄 10-9.c
字号:
#include <stdio.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>
#define PROJID 0xFF
int main(void)
{
char filenm[] = "shared-file";
char * shm_addr;
int semid, shmid;
key_t semkey, shmkey;
struct sembuf getsem, setsem;
semkey = ftok(filenm, PROJID);
if (semkey == -1) {
perror("ftok error: ");
exit(-1);
}
semid = semget(semkey, 0, 0);
if (semid == -1) {
perror("semget error: ");
exit(-1);
}
getsem.sem_num = 0;
getsem.sem_op = -1;
getsem.sem_flg = SEM_UNDO;
setsem.sem_num = 1;
setsem.sem_op = 1;
setsem.sem_flg = SEM_UNDO;
shmkey = ftok(filenm, PROJID + 0x0F00);
if (shmkey == -1) {
perror("ftok error: ");
exit(-1);
}
shmid = shmget(shmkey, 4096, 0);
if (shmid == -1) {
perror("shmget error: ");
exit(-1);
}
shm_addr = (char *)shmat(shmid, NULL, 0);
if (shm_addr == (char *)-1) {
perror("shmat error: ");
exit(-1);
}
while (1) {
semop(semid, &getsem, 1);
printf("Lucy: %s\n", shm_addr);
printf("Peter: ");
fgets(shm_addr, 256, stdin);
if (strncmp("quit", shm_addr, 4) == 0) {
shm_addr[strlen(shm_addr)-1] = '\0';
semop(semid, &setsem, 1);
if (shmdt(shm_addr) == -1) {
perror("shmdt error: ");
}
exit(0);
}
shm_addr[strlen(shm_addr)-1] = '\0';
semop(semid, &setsem, 1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -