With the code below I am trying to send "AT\r" to the modem and I am expecting "OK\r" back but I am not getting it, I am getting "AT\r" back. Any ideas or pointers? Also I know I am opening the correct device and I have tested the modem in windows using hyperterminal and I do get "OK\r" back. Thanks

Code:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include "sort.h"

int init_modem(int fd);

int main(int argc, char** argv)
{
    int fd;
    struct termios options;

    fd = open(argv[1], O_RDWR | O_NOCTTY | O_NDELAY);
    fcntl(fd, F_SETFL, 0);

    tcgetattr(fd, &options);

    options.c_cflag |= (CLOCAL | CREAD);
    options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
    options.c_oflag &= ~OPOST;
    options.c_cc[VMIN] = 3;
    options.c_cc[VTIME] = 10;

    tcsetattr(fd, TCSANOW, &options);

    printf("Return: %d\n", init_modem(fd));

    return 0;
}

int init_modem(int fd)
{
    char buffer[4];
    char *bufptr;
    int num;

        if(write(fd, "AT\r", 3) < 3)
            printf("Error!\n");

        num = read(fd, buffer, 3);

        buffer[3] = '\0';

        printf("Number: %d\n", num);
        printf("Buffer: %s\n", buffer);

   return(0);
}