我正在使用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 程序(服务器代码)中,我想要一个在/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)
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)