IOLib version 4.0c

Official homepage:

This software is released under the terms of the GNU Library General Public License (LGPL). See the file 'Copying.lib' for details.


- What's new in IOLib 4.0c
- About the author
- What is IOLib?
- Why do I need it?
- How do I use it?
- Reporting bugs

What's new in IOLib 4.0c

The following things have been added or changed since release 4.0b:

- applied a patch for InStream::InputLine that fixes a data curruption bug
- applied a patch that makes IOLib work on SGI Irix machines
- changed the port number in the client/server test to 17000 to avoid conflicts on machines running qotd servers

Note: IOLib 4.0c is binary compatible with older 4.0 versions.
About the author

IOLib was written by Robert Kausch. You can contact me at

I am an 18 year old student from Lueneburg/Germany. I started writing computer programs in 1994. My first programming language was QBasic (it was part of MS-DOS). In 1996 I started to write Windows applications with GFA-Basic (a mixture of Basic, Pascal and C). After a hard disk failure in mid 1998 nearly all my source code was lost and so I bought a book about C++ and started learning.
Currently I'm maintaining two OpenSource projects. SMOOTH and IOLib.

What is IOLib?

IOLib is a universal multiplatform IO library. It is implemented in C, C++ and Objective-C and is available for many different platforms. IOLib provides an unified interface for accessing different types of streams.

IOLib supports multiple kinds of data IO:
- Integer IO in Intel HEX order
- Integer IO in RAW HEX order
- Integer IO in VAX HEX order
- Bit by bit IO (PBD)
- String IO
- Raw data IO
It supports the following types of streams:
- POSIX files
- ANSI files
- Windows file handles
- BSD sockets
- SOCKS4 connections
- SOCKS5 connections
- memory buffers
IOLib provides two classes >InStream< and >OutStream< which provide input and output mechanisms (you cannot use input and output operations with one single object, but you can create a crosslinked stream).

Why do I need it?

So which advantages does IOLib have over other solutions?
The great advantage of IOLib is, that it provides an unified interface to different types of streams. It doesn't matter what type of stream you intend to access, the interface is always the same.
Another important point is that IOLib is compatible with many different operating systems and that implementations are available in different programming languages (currently in C, C++, Objective C).
Furthermore, if you are using IOLib you don't have to care about the byte order in your binary files anymore. IOLib supports Intel, Motorola (Raw) and VAX byte order and automatically adjusts to the host machine.
A new feature of IOLib 2.0 was the capability of filtering your data before writing it to a file. The filter support has been improved in the 4.x series. The API now supports compression/decompression filters and filters that have to process a file in one step.

How do I use it?

First you have to compile IOLib for your system. Since this release, IOLib is compatible with the following operating systems and compilers:
- Linux GCC
- Windows GCC-MinGW32 (no shared Objective C library)
- Windows GCC-Cygwin (no shared Objective C library)
- Windows MS Visual C++ (C and C++ libraries only)
- Windows Borland C++ (static C and C++ libraries only)
- Windows LCC-Win32 (C libraries only)
- DOS GCC-DJGPP (static libraries only, no socket support)
- Tru64 Unix Compaq C (static C library only)
- Solaris GCC
- SGI Irix GCC
- possibly some others, porting should be easy
If you want to have your compiler/OS supported send me a download URL or send a copy to my home address (ask for it via eMail).

Just type 'make' ('nmake' for MSVC, 'make -s' for LCC) in the distribution directory to get a list of the available targets. Then type 'make [target]' to compile IOLib for your system and programming language.
Type 'make [target]-install' to install the library in the default prefix (usually /usr/local or /usr) and optionally 'make [target]-clean' to clean the build directory.
You can change the install prefix by editing the toplevel makefile.

Please choose your programming language:

Objective C

Reporting bugs

If you think you've found a bug in IOLib please submit a full bug report including a detailed description of how to reproduce the bug (it would be very nice if you included the source code that produces the bug in your report). If possible, please write a patch that fixes the bug and send it along with the report.

If you have found any bugs in IOLib please contact me at

Please visit the official IOLib homepage at and try the newest release of IOLib first!