시리얼통신 질문입니다.
글쓴이: harisoo / 작성시간: 수, 2006/07/19 - 2:39오후
시리얼 프로그래밍중 이상한 부분이 있어서 글을 올려요.
지금 제가 KLDP의 시리얼하우투문서를 보면서 따라하고 있습니다. 그 중 select함수를 통한 멀티플레싱부분을 보고
따라하고 있는데 이상한 문제가 발생합니다. 자꾸 select함수가 리턴이 되는됩니다. 아래에 제 소스코드를 올립니다.
int main(void) { fd_set readfds; int fd; struct termios options; if ( ( fd = open("/dev/ttyS1",O_RDWR | O_NOCTTY | O_NDELAY) ) < 0 ){ printf("device file open error\n"); return 1; } bzero(&options,sizeof(options)); options.c_cflag = B19200 | CLOCAL | CREAD | CS8; options.c_iflag |= IGNPAR; options.c_oflag |= OPOST; options.c_oflag |= ONLCR; options.c_lflag = 0; options.c_cc[VTIME] = 0; options.c_cc[VMIN] = 0; tcflush(fd,TCIOFLUSH); if ( tcsetattr(fd, TCSANOW, &options) < 0 ){ printf("tcsetattr error\n"); close(fd); return 1; } while(1){ FD_ZERO(&readfds); FD_SET(fd,&readfds); if ( select(fd+1,&readfds,NULL,NULL,0) > 0 ){ printf("select() return\n"); if ( FD_ISSET(fd,&readfds) ){ fprintf(stdout,"port1 \n"); show_data(fd); } } } return 0; }
여기가 수신부분이고 송신부분은 다 똑같고 루프문안에 5초마다 데이터를 보내도록 했습니다. 그런데 이상하게도
한번 데이터를 읽고나면 더이상 데이터가 남은부분이 없는데도 select()함수가 리턴됩니다. 실제 show_data함수에서는
아무것도 안나오거든요. 문제가 무엇인지 감을 못잡겠습니다. 송신데이터의 크기가 제각각이라면 문제가 되는걸까요?
지금 루트디렉토리의 각 파일을 열어서 그내용을 보내도록 했거든요. 물론 보낼때는 태그를 붙여서(제맘대로 정의한) 송신
데이터의 길이를 알 수 있습니다.
Forums:
select가 안보입니다.
select가 안보입니다. 코드를 다시 올려보세요.
이런
죄송합니다
태그를 안붙엿네요 ...T^T
흠...
흠.. 잘 안보이네요..^^
혹시, 송신측에서 EOF를 보낸건 아닐까요?
ls -al 'happy' | grep 'possible'
A few Good Man
댓글 달기