read 함수의 사용에서 no-delay문제

mousemax의 이미지

fd = open()함수로 파일 또는 시리얼 포트 등을 열고

read 함수로 읽어올때 일반적으로 no-delay optian은 밑과 같은걸로 알고있습니다.

fcntl(fd, F_SETFL,O_NDELAY);

제가 사용하는 코드
while(1)
{
state = read(fd, buf, 255);

if(state > 0)
{
:
printf("\n");
}
}
서도 작 작동됨니다.
하지만 제가 시리얼 포트를
non-canonical
newtio.c_cc[VTIME] = 1;
newtio.c_cc[VMIN] = 0;
로 설정해서 보통 매 read함수로 읽을때 만다 거의 한byte를 읽어오는데
여러번 read함수를 반복해서 4byte를 읽으면 화면에 값을 축력 하게 프로그램 했습니다.
이때 는 코드 중간의 printf("\n"); 문이 선택적으로 동작을 하게 되겠죠.
이러면 문제 가 생기더군요.
그래서 임시적으로
while(1)
{
state = read(fd, buf, 255);
printf("\n");
sleep(1); /*1초 delay 너무 빨리 회면에 출력되서*/
if(state > 0)
{
:

}
}
이렀게 해서 사용하는데
왜 read함수를 사용하고 printf("\n"); 출력되야 다시 read함수를 사용하 수 있지 printf("\n"); 를 출력하지 않으면 시리얼로 data가 들어와 buffer에 쌓이더라도 read함수로 읽어올수가 없는것 같은데 왜그런가요?

시리얼 option에서 \n를 사용하게 설정이 되있는건지 왠지 궁금하군요
(
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NDELAY);
printf("seral port open :%d \n\r",fd);
if (fd <0) {perror(MODEMDEVICE); exit(-1); }
tcgetattr(fd,&oldtio); /* 현재 설정을 oldtio에 저장 */

bzero(&newtio, sizeof(newtio));

newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;

newtio.c_iflag = IGNPAR;

// newtio.c_lflag = 0;
// newtio.c_oflag = 0;

newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
newtio.c_oflag &= ~OPOST;

newtio.c_cc[VTIME] = 1;
newtio.c_cc[VMIN] = 0;

tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
fcntl(fd, F_SETFL,O_NDELAY);
)
시리얼 포트는 외와 같이 KLDP에 있는 문서 보고 일반적으로 만들었습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.