rd235 / libfduserdata

associate file descriptors with user defined data

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

libfduserdata

associate file descriptors with user defined data

This small library permits to associate user defined data to file descriptors. This library is thread safe.

The library uses a hash table.

Initialization/Termination

The function fduserdata_create sets up the data structure. e.g.

FDUSERDATA table = fduserdata_create(0);

The optional parameter (here 0) is the size of the hashtable. The default size if 64.

When the data structure is no longer needed it can be deleted/freed using:

fduserdata_destroy(table);

create a new element:

Allocate a struct mydata element connected to the file descriptor fd in table:

struct mydata *data = fduserdata_new(table, fd, struct mydata);
// mydata.xxxx = yyyy
// intialize all mydata  fields
fduserdata_put(data)

Please note that fduserdata_put is required to close the critical section. No other threads can add, read or modify elements in table until the current element has been completely initialized and fduserdata_put has been called.

search an element/modify

struct mydata *fddata = fduserdata_get(table, fd);
if (fddata) {
    //... read/update user defined data (data->fields)
    fduserdata_put(data);
}

Again fduserdata_put closes the critical section. Slow or blocking operations should not take place between fduserdata_get and fduserdata_put

delete an element

struct mydata *fddata = fduserdata_get(table, fd);
if (fddata)
    fduserdata_del(data);

fduserdata_get (or fduserdata_new) is needed before fduserdata_del because fduserdata_del deletes the element while it closes the critical section. (in this way it is not possible to delete an element twice).

compile and install the library:

This is a sequence of commands that can be used to compile install the library.

mkdir build
cd build
cmake ..
make
sudo make install

About

associate file descriptors with user defined data

License:GNU Lesser General Public License v2.1


Languages

Language:C 82.6%Language:CMake 17.4%