需求
实现一个管道,管道可以让多线程读写数据
头文件
#ifndef LINUX_MYPIPE_H
#define LINUX_MYPIPE_H
#define PIPESIZE 1024
#define MYPIPE_READ 0x00000001UL
#define MYPIPE_WRITE 0x00000002UL
typedef void mypipe_t;
//初始化管道
mypipe_t * mypipe_init(void);
//使用管道前需要注册管道的行为
int mypipe_register(mypipe_t *, int opmap);
//管道使用结束后要注销管道的行为
int mypipe_unregister(mypipe_t *, int opmap);
//读管道
size_t mypipe_read(mypipe_t *, void *buf, size_t size);
//写管道
size_t mypipe_write(mypipe_t *, const void *buf, size_t size);
//销毁管道
int mypipe_destroy(mypipe_t *);
#endif //LINUX_MYPIPE_H
实现
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <errno.h>
#include "mypipe.h"
struct mypipe_st {
int head;
int tail;
char data[PIPESIZE];
int datasize;
int count_rd;
int count_wr;
pthread_mutex_t mut;
pthread_cond_t cond;
};
static size_t min(size_t n1