我想用 linux C 构建一个表
每个表条目有 3 个字段:
1 个 ip/端口对,2 个 FIFO 队列指针,3 个线程 ID
第一个条目 ip/port 对也是搜索的关键,
对于这个表,功能是:
1 insert entry: insert(table* tb, entry* ent)
2 delete entry (by searching key) : delete(table* tb, key* k)
3 search entry* get_entry(table* tb, key* k), which returns a entry* pointer.
为了让IP/PORT pari作为key,我处理这对的想法是把IP地址转换成u_int32_t
,端口转换成,u_int16_t
然后做一个u_int64_t
整数key = (port << 32)+ip
我最初的想法是制作链表
typedef struct {
u_int64_t ip_port_pair;
struct queue* q;
pthread_t pid;
} entry;
在链表中,每个元素都是一个 entry* 指针。但是这样搜索起来有点麻烦,而且如果 u_int64_t 不能在 32 位机器上使用,我就得做一个类似这样的结构:
typedef struct{
u_int32_t ip;
u_int16_t port;
struct queue* q;
pthread_t pid;
}
并且做两个项目:ip和port作为key,那就比较麻烦了。
是否有任何类似的源代码/片段可以满足我的要求?谢谢!