libaio

Okay, I think libaio is mature enough to be ready for at least a minor announcement.

libaio is a framework for writing event-driven (quasi-asynchronous) programs. (The name is partially historical; when I first wrote it, the major use case was doing I/O.) I've been using it for some time now and it has proven extremely useful; I'm now in the pre-alpha stages of another library which is built atop libaio, which to me indicates it's time to push libaio into alpha.

It's got two, or maybe three, main pieces.

There's the poll loop. At its most basic, this just wraps poll(2), making it more convenient to use in a callback style. There are various frills, such as support for multiple poll loops.

There are output queues. These are queues of data to be sent (whatever `sent' means in the context of a particular program), with various associated routines.

The possibly-third piece is actually just a variation on the output queues. There is a variant of them that is designed for sending packets of some kind, where each packet has a priority and we want to send higher-priority packets before lower-priority packets.

There is a reference document, in the form of a manpage which describes the interface. At this writing, there is no tutorial document; I will be writing one. See below for more on that.

As I trust will surprise nobody who's been following my blah, the major distribution mechanism for it is a world-clonable git repo; in this case git://git.rodents-montreal.org/libaio is the thing to clone. You will need labeled control structure in your compiler, or lcs-cvt (git://git.rodents-montreal.org/lcs-cvt) to make up for the lack.

I am of course interested in hearing from anyone with anything to say about it, whether praise, flames, bug reports, feature requests, or even just random thoughts. See the footer on the main page of my blah (link below) for my email.

The tutorial document, while doubtless in need of more work, is here.

Main