小编Abh*_*hek的帖子

如何从hsearch中删除元素

我正在使用GNU C库提供的hsearch_r函数.

我看到虽然我可以使用hsearch_r将元素添加到HASH表中并将操作作为ENTER传递,但是我看不到从HASH表中删除元素或条目的方法.

有人知道为什么会这样吗?

我可以执行以下操作来实现删除功能.

我首先使用hsearch_r搜索它,操作为FIND.然后,一旦我得到一个指向hash_element的指针,然后我释放它.那会有用吗?如果我只能添加元素并搜索它们,那么哈希库有什么用处.为什么不提供删除例程?

我试着谷歌搜索hsearch库的源代码,无法找到它.有人也可以指出我吗?

http://linux.die.net/man/3/hcreate_r

编辑:

我也看到,如果我用动作ADD调用hsearch_r两次,那么它既不会抛出错误,也不会使用新值更新散列.这很奇怪.这意味着内部hsearch不实现替换功能,我们必须自己完成,即首先进行搜索,然后如果存在,则删除第一个条目,然后添加一个新条目.但是要做到这一点,我们需要从哈希中删除一个元素,我无法做到.

c hash search gnu

2
推荐指数
1
解决办法
2130
查看次数

为什么 select 调用不会在 unix 域套接字上阻塞?

我在谷歌上搜索了很多但没有得到答案,因此将其发布在这里。

在下面的 C 程序(服务器代码)中,我想要一个在/tmp/unix-test-socket. 我的问题是客户端代码能够成功连接到服务器。但是,一旦连接并且我“接受”了连接,select调用就不会阻塞。

所以让我解释一下。

最初的 unix_domain_socket = 3

一旦我收到第一个请求,就接受连接并将其存储在 unix_domain_socket_connections[max_unix_domain_socket_connections] 中。套接字的fd值为 4。

当我运行服务器代码时,它会进入一个循环,因为 select 调用认为套接字 4 中总是有数据。

我将客户端运行为:

./unix-client "/tmp/unix-test-socket" SEND_DATA
Run Code Online (Sandbox Code Playgroud)

SERVER端的输出:

Client sent us a message!

Successfully accepted the new ION connection with fd 4!

[program_select_to_look_at_right_sockets]: Storing fd 4

Data Arrived on UNIX domain socket 4

length 10 SEND_DATA  <-- I get the data sent by the client

[program_select_to_look_at_right_sockets]: Storing fd 4 *<-- Why isnt select blocking and why does it …
Run Code Online (Sandbox Code Playgroud)

c c++ sockets unix-socket

1
推荐指数
1
解决办法
3332
查看次数

标签 统计

c ×2

c++ ×1

gnu ×1

hash ×1

search ×1

sockets ×1

unix-socket ×1