>>604のやつで
char *buf = NULL;

fgets(buf,CMD_MAX,stdin);
if("exit" == buf){

で、fgetsって、配列じゃない単なるポインタに文字列格納できんの?
あと、if文のこの比較もありなか?

char buf[CMD_MAX];

fgets(buf,CMD_MAX,stdin);
if(strcmp(buf, "exit") == 0){

じゃね?