A UNIX/C library of general utilities for programmers with Slack

Slack(n.): The state in which you need nothing,
because you already have it.
-- Dobbs, 1956

What is libslack? | Features | Development | Supported Platforms | Documentation | Download | Mailing Lists

What is libslack?

Libslack is a library of general utilities designed to make UNIX/C programming a bit easier on the eye. It is a seemingly random collection of modules and functions that I find commonly useful. It was originally implemented as part of the daemon program (although some of the code dates back much further).

It's a small library with lots of functionality, accurately documented and thoroughly tested. Good library naming conventions are not rigorously observed on the principle that common operations should always be easy to write and code should always be easy to read.

Libslack is freely available under the GNU General Public License.


For more information read the manual entries in the Documentation section.

Supported Platforms

Currently, libslack is only known to compile and work on:

It is written in ISO C using POSIX almost exclusively except for some BSD functions that appear on most systems (e.g. sockets). So it shouldn't be difficult to get it working on other (recent) systems that support ISO C, POSIX and XPG4.


There is a README file, libslack overview manpage, a manpage for each module in libslack and a manpage for the libslack-config utility. There is also the paper MT-Disciplined - decoupling thread safety.

README - Description, Install, Requirements, Copying, History, References, TODO
libslack(3) - an overview of libslack
libslack-config(1) - administration utility for libslack
agent(3) - agent oriented programming (header, source)
coproc(3) - coprocesses using pipes or pseudo terminals (header, source)
daemon(3) - becoming a daemon (header, source)
err(3) - message/error/debug/verbosity/alert messaging (header, source)
fio(3) - fifo and file control and some I/O (header, source)
getopt(3) - GNU getopt_long() for systems that don't have it (header, source)
hsort(3) - heap sort (by Stephen Russell) (header, source)
lim(3) - POSIX.1 limits convenience functions (header, source)
link(3) - abstract linked lists with optional growable free lists (header, source)
list(3) - list (growable pointer array) data type (header, source)
locker(3) - abstract locking and reader/writer lock implementation (header, source)
map(3) - map (hash table) data type (header, source)
mem(3) - memory helper functions, secure memory, memory pools (header, source)
msg(3) - message handling and syslog helper functions (header, source)
net(3) - network functions (clients/servers, expect/send, pack/unpack, mail) (header, source)
prog(3) - program framework and flexible command line option handling (header, source)
prop(3) - program properties files (header, source)
pseudo(3) - pseudo terminals (by Tatu Ylonen) (header, source)
sig(3) - ISO C compliant signal handling (header, source)
snprintf(3) - safe sprintf() for systems that don't have it (header, source)
str(3) - string data type (tr, regex, regsub, fmt, trim, lc, uc, ...) (header, source)
vsscanf(3) - sscanf() with va_list argument for systems that don't have it (header, source)


Latest: libslack-0.6.tar.gz (MD5 0e22e1d38865be2d94372027e5c42b58)
libslack-0.6.html.tar.gz (MD5 8687e661c8e3cf591bc33231a9aff553)
libslack-0.6-1.src.rpm (MD5 c8beb25f8318d1533a9ea12dda7ba0ec)
libslack-0.6-1.x86_64.rpm (MD5 27744fd69bceca8b0cc4bc0fadd1beb3)
libslack-0.6-1.i686.rpm (MD5 a9b1e1537479ef07f2694b1ab7243b95)
libslack-0.6-openbsd-amd64.tgz (MD5 15a435e4323741cacf5bcb01e7b8e02e)
libslack-0.6-openbsd-i386.tgz (MD5 ab948f0299f2af547b0e52fd5007117d)
libslack-0.6-freebsd-amd64.tbz (MD5 4534b9c6561d70f2beecea8da7874cfa)
libslack-0.6-freebsd-i386.tbz (MD5 e4648201679e2cee51c07d95a128bc2a)
libslack-0.6-netbsd-amd64.tgz (MD5 f97a65cb9d329953c22587703e453f5b)
libslack-0.6-netbsd-i386.tgz (MD5 1ab96a2b9d4b901368f728e92e58df5f)
libslack-0.6-macosx-universal.tar.gz (MD5 f724768a9097e14555de1ce829faed8a)
libslack-0.6-macosx-x86_64.tar.gz (MD5 6966b0481f99f5b80f214a7dcb1644a2)
libslack-0.6-macosx-i386.tar.gz (MD5 2ed680edefe1b06d6fffb79b72fde0a3)
libslack-0.6-macosx-powerpc.tar.gz (MD5 5d95ebbaa7c2412db762fcad87a44ce8)
libslack-0.6-macosx-10.4-powerpc.tar.gz (MD5 d938a42e3387f156d31175a35412658d)
libslack-0.6-solaris-amd64.pkg.gz (MD5 044d3722ccc73948803edb13167c07bc)
libslack-0.6-solaris-i386.pkg.gz (MD5 16d5a585bc598102c8c6d7e7cb1bde33)
Previous: libslack-0.5.2.tar.gz (MD5 9942170b2fba9482ec01e80bafd6adcd)
libslack-0.5.2.html.tar.gz (MD5 42da7a3fe9be3ec468dc68715178380a)
libslack-0.5.2-1.src.rpm (MD5 cb5baafc3a26f28ce9f5b4333cdf0660)
libslack-0.5.2-1.i386.rpm (MD5 20d7a620ae1cd2f0e58d1c47b3caf676)
libslack-0.5.2-obsd-i386.tar.gz (MD5 b05528427b6cd1f94f42ca676436dabc)
libslack-0.5.2-fbsd-i386.tar.gz (MD5 b20d42897184f2ad35688bf73d83bb6a)
libslack-0.5.2-macosx-powerpc.tar.gz (MD5 cff8885d5e771136b9efa5095baeba9c)
libslack-0.5.2.sun4u.pkg.gz (MD5 294d4efa672957c0e6bb740b357d8a0d)
libslack-0.5.2.i86pc.pkg.gz (MD5 2dd948e8580ab8973b7be1ec73108161)
libslack-0.5.1.tar.gz (MD5 3e9a56f5c72815fa0429edbed422eaf0)
libslack-0.5.1.html.tar.gz (MD5 48e40b0f9b75a7f7bd5e33d9a1bb497d)
libslack-0.5.1-1.src.rpm (MD5 9421146784e53f654f0bc5f42116ab8d)
libslack-0.5.1-1.i386.rpm (MD5 637e5df1bec8729a670f00543402e6b0)
libslack-0.5.1-obsd-i386.tar.gz (MD5 b3cc970fa6adf22df8e7e7c48fd63c8d)
libslack-0.5.1-fbsd-i386.tar.gz (MD5 8f61384e6d773acb26cd64eb4baa20e6)
libslack-0.5.1.sun4u.pkg.gz (MD5 9d4980b993deec7e2ed66b7a78b5c9d4)
libslack-0.5.tar.gz (MD5 f2ff301ea1c41ebd383bd8a2858bf146)
libslack-0.5.html.tar.gz (MD5 36aa343a20d31187e0dae762c2b663ad)
libslack_0.5_i386.deb (MD5 37cc5434066e0ecde72a2f629c91838e)
libslack-0.5-1.i386.rpm (MD5 e2596c899ad08c0d25ed5e6227e89d67)
libslack-0.5-1.src.rpm (MD5 4680e74571e68f1d7d73bc9b67ec759e)
libslack-0.5-obsd-i386.tar.gz (MD5 7d4724376d7ad2e11f9d4cc34362786e)
libslack-0.5.sun4u.pkg.gz (MD5 87f865886f36b39d836e74f29b62a0ce)
libslack-0.4.tar.gz (MD5 899867f5b2a8e8210af9b4e2e99f0ae3)
libslack-0.4.html.tar.gz (MD5 6c2382bf72e6e70b642cfb208a2c2a84)
libslack_0.4_i386.deb (MD5 7cedbf96e22bd622863f92ea9f9f1bc6)
libslack-0.4-1.i386.rpm (MD5 a782a9f79abb514e48a49ba6289bbe70)
libslack-0.4-1.src.rpm (MD5 ab362ae5f3a4b8264a3e26ac42be16bc)
libslack-0.4.sun4u.pkg.gz (MD5 5b5d8cb4f3beb0fddd2683f315e55575)
libslack-0.3.tar.gz (MD5 9972edf942e7e98b0d1709ed55c4d11e)
libslack-0.2 (only available as part of daemon-0.2.tar.gz)
libslack-0.1 (only available as part of daemon-0.1.tar.gz)

Mailing Lists

If you'd like to be kept up to date with libslack releases or have questions or suggestions, you can join one or more of the following mailing lists (

  slack-announce (Announcements)
slack-users (User forum)
slack-dev (Development forum)

To subscribe to any of these mailing lists, send a mail message to with subscribe as the message body.

$ echo subscribe | mail
$ echo subscribe | mail
$ echo subscribe | mail

Or you can send a mail message to with subscribe listname in the message body. This way, you can include multiple subscribe commands to subscribe to multiple lists at the same time.

$ mail
subscribe slack-announce
subscribe slack-users
subscribe slack-dev

A digest version of each mailing list is also available. Subscribe to digests as above but append -digest to the listname.

$ echo subscribe | mail
$ echo subscribe | mail
$ echo subscribe | mail


$ mail
subscribe slack-announce-digest
subscribe slack-users-digest
subscribe slack-dev-digest

Note that these are all extremely low volume mailing lists so there's not much use for the digest lists.

What is libslack? | Features | Supported Platforms | Documentation | Download | Mailing Lists

Last modified by raf at Thu Jul 15 10:17:20 EST 2010