0

我想用 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,那就比较麻烦了。

是否有任何类似的源代码/片段可以满足我的要求?谢谢!

4

2 回答 2

1

听起来您正在尝试实现关联数组或哈希表。由于您使用的是 Linux,因此最简单的选择可能是使用glibc 中的哈希表功能。如果 glibc 不是一个选项,还有许多其他可用的哈希表库,例如uthash 。

于 2013-05-13T16:47:05.203 回答
0

只需构造一个二叉搜索树,就像这样

http://www.thelearningpoint.net/computer-science/trees/binary-search-trees---c-program-source-code-and-documentation

于 2013-05-13T16:39:00.937 回答