시리얼통신 질문입니다.

harisoo의 이미지

시리얼 프로그래밍중 이상한 부분이 있어서 글을 올려요.

지금 제가 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함수에서는

아무것도 안나오거든요. 문제가 무엇인지 감을 못잡겠습니다. 송신데이터의 크기가 제각각이라면 문제가 되는걸까요?

지금 루트디렉토리의 각 파일을 열어서 그내용을 보내도록 했거든요. 물론 보낼때는 태그를 붙여서(제맘대로 정의한) 송신

데이터의 길이를 알 수 있습니다.

kewlbear의 이미지

select가 안보입니다. 코드를 다시 올려보세요.

harisoo의 이미지

죄송합니다 태그를 안붙엿네요 ...T^T

코퍼스의 이미지

흠.. 잘 안보이네요..^^
혹시, 송신측에서 EOF를 보낸건 아닐까요?

ls -al 'happy' | grep 'possible'

A few Good Man

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.