Ideas behind the project: This is an attempt to make a smart text mode mp3 player client for mpg123 ideally to be used in a car. The intent is to use mpg123 in remote control mode and have my client send commands to it. Keep in mind that there is a totally free drop-in replacement of mpg123 that is called mpg321. The main features of this client are: Configurable default actions at startup in order to be able to have acceptable functionality without need to fiddle while driving (in other words something smart enough need not interacting with driver but that can support it if needed). Support for playing recursively directories (including links) as if it were a playlists while still keeping a real playlist support. Ability to reload the last playlist being played. Ability to resume playback from the track that was last being played. Ability to change playlist interactively while driving. Random playback of any given playlist. Repeating the playback of a playlist indefinitely even when in random mode. Concepts behind it: Keep in mind that this was written before any of the actual code was implemented so some ideas may have changed but I usually place a reasonable amount of comments in the code (mainly for me to remember what I wanted to do at time of writing so that if I need to change something I can do it more efficiently) mpg123 in remote control mode reads commands from stdin and writes a lot of status information in stdout. mpg123 in remote control mode can only play one track at a time. So this is the idea: create 2 named pipes and have client write commands to one (cmd_pipe) and read status from the other (stat_pipe) this leaves the client free to have it's own stdin and stdout for interacting with user (ideally the driver) if necessary. Although it is not technically necessary to create named pipes using c it might be nice to have an extra way of controlling mpg123 via anything that can echo commands to command pipe. At the same time start mpg123 in remote control mode so that it reads commands from cmd_pipe and writes status to stat_pipe. Client should watch out for the end of file in stat_pipe and send command to cmd_pipe so that mpg123 can start playing next file. Client should write to some file what is was last doing before exiting so that it can resume same action when started again. Client should also store a configuration file so that it can retain some default actions and settings like: resume playback or start over again from default playlist, volume settings, playback mode (random or repeat) Client should also abort attempting to resume playback of any modified playlist (or directory). Client should also watch out if mpg123 is having difficulty in playing any track (ie unsupported bit rate or invalid data) and respond adequately to the problem (for the two problems listed I think it should just skip track).