Understanding UNIX/LINUX Programming: A Guide to Theory and Practice