[질문] 시리얼 통신에 대한 질문입니다.

초코리의 이미지

시리얼 통신에 대한 질문입니다.

시리얼포트를 가지고 모뎀에 전화를 걸고 하는 프로그램을

짜고 있습니다.

예제소스를 보고 있는데요


                fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
                if (fd == -1){
                                printf("open Modem\n");
                }
                else{
                                printf("Open Modem success\n");
                                fcntl(fd, F_SETFL, 0);
                }

                a = tcgetattr(fd, &options);
                printf("TcGetAttr is %d\n",a);

                cfsetispeed(&options, B38400);
                cfsetospeed(&options, B38400);

                options.c_cflag &= ~PARENB;
                options.c_cflag &= ~CSTOPB;
                options.c_cflag &= ~CSIZE;
                options.c_cflag |= CS8;
                options.c_cflag |= CRTSCTS;

                options.c_lflag |= ICANON;

                options.c_lflag |= ~ECHO;//에코제거
                options.c_oflag |= OPOST;

                b = tcsetattr(fd, TCSANOW, &options);


위와 같은 부분에서

fcntl(fd, F_SETFL, 0); 이부분이 들어가더군요

fcntl의 man page를 보면

O_APPEND, O_NONBLOCK 그리고 O_ASYNC 이세가지만 인식되고 나머지는 무시한다고 되어 있는데요

0이 들어가면 위에 3가지 중에 들어가지않아 무시 될터인데 저부분을

주석처리하면 동작을 하지않습니다.

그리고

n = write(fd, "at\r\n", 20); at명령을 보낼때 \r\n을 같이 보내야 어느정도 정확하게

인식을 하던데요 꼭 \r\n이런식으로 보내야 하는지요.

답변 부탁드립니다.
소스코드 전체를 올릴까 하다가 하도 지저분해서 올리지않았는데요.
도움을 주실때 필요하시다면 적어주세요..