该小项目有四个文件
(1)shmfifo.h
(2)shmfifo.c
(3)put.c
(4)get.c
(1)shmfifo.h
2 #ifndef __SHMFIFO_H__
3 #define __SHMFIFO_H__
4
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8 #include <sys/shm.h>
9 #include <assert.h>
10 #include <sys/ipc.h>
11 #include <unistd.h>
12 //头信息结构体
13 typedef struct shm_head
14 {
15 int rd_idx;//读位置
16 int wr_idx;//写位置
17 int blocks;//块的总数
18 int blksz;//每块的大小
19 }head_t;
20
21 //总的这块用来实现消息队列的 共享内存结构体
22 typedef struct shmfifo
23 {
24 head_t *p_head;//指向头信息结构体的指针
25 char* p_payload;//装有效内容的起始地址
26 int shmid;
27 int sem_full;//还有多少可以装的信号量
28 int sem_empty;//还有多少可以消费的信号量
29 int sem_mutex;//不能2个用户同时访问一个位置的 互斥信号量
30 }shmfifo_t;
31
32 //初始化以上结构体的函数,
33 //返回类型为那块共享内存(共享内存结构体)的地址
34 //参数为:共享内存的key,要申请的块数,每块的大小
35 shmfifo_t* shmfifo_init(int key,int blocks,int blksz);
36
37 //往这块共享内存放数据
38 //参数为:申请的共享内存的地址,要放的数据的源地方
39 void shmfifo_put(shmfifo_t* fifo, const void* buf);
40
41 //从这块共享内存取数据
42 //参数为:要取的共享内存地址,取到的数据暂放的地方
43 void shmfifo_get(shmfifo_t* fifo, vo