#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/poll.h>
#include <termios.h>                
#include <fcntl.h>                     // O_RDWR , O_NOCTTY 등의 상수 정의
                  
int main( void)
{        
   int    fd;
   int    ndx;
   int    cnt;
   char   buf[1024];
   struct termios    newtio;
   struct pollfd     poll_events;      // 체크할 event 정보를 갖는 struct
   int    poll_state;

   // 시리얼 포트를 open

   fd = open( "/dev/ttyS0", O_RDWR | O_NOCTTY | O_NONBLOCK );        // 디바이스를 open 한다.
   if ( 0 > fd)
   {        
      printf("open errorn");
      return -1;
   }
                        
   // 시리얼 포트 통신 환경 설정                        
                        
   memset( &newtio, 0, sizeof(newtio) );
   newtio.c_cflag       = B9600 | CS8 | CLOCAL | CREAD | IGNPAR;      
   newtio.c_oflag       = 0;
   newtio.c_lflag       = 0;
   newtio.c_cc[VTIME]   = 0;    
   newtio.c_cc[VMIN]    = 1;    
  
   tcflush  (fd, TCIFLUSH );
   tcsetattr(fd, TCSANOW, &newtio );
   fcntl(fd, F_SETFL, FNDELAY);


   // poll 사용을 위한 준비
  
   poll_events.fd        = fd;
   poll_events.events    = POLLIN | POLLERR;          // 수신된 자료가 있는지, 에러가 있는지
   poll_events.revents   = 0;

                                
   // 자료 송수신                                
                                
   while ( 1)
   {                
      poll_state = poll(                               // poll()을 호출하여 event 발생 여부 확인    
                         (struct pollfd*)&poll_events, // event 등록 변수
                                                   1,  // 체크할 pollfd 개수
                                                1000   // time out 시간
                       );
                                                
      if ( 0 < poll_state)                             // 발생한 event 가 있음
      {    
         if ( poll_events.revents & POLLIN)            // event 가 자료 수신?
         {
            cnt = read( fd, buf, 1024);
            write( fd, buf, cnt);

            printf( "data received - %d %sn", cnt, buf);

         }
         else if ( poll_events.revents & POLLERR)      // event 가 에러?
         {      
            printf( "통신 라인에 에러가 발생, 프로그램 종료");
            break;
         }
      }
   }
   close( fd);
   return 0;  
}





위의 예제 소스를 약간 변형하여   리더기로 부터 테크값을 받아 오려고 하엿는데 ( RS-232 통신 맞습니다.)

(속도와 포트 이름정도 바꾸었습니다.)

소스 내부의
===========================================
printf( "data received - %d %sn", cnt, buf);
===========================================
for(i=0 ; i < 데이터의 길이 ; i ++)
{
   printf ("%sn"buf[i]);
}

와 같은 형태로 출력 부분을 교체 해보아도 이상한 결과만 나옵니다.

위으 printf 문의 출력 형태가 잘못 되어 안나오는것인지요?

아니면 리더기로 부터  시리얼 통신으로 값을 받아오는 설정이 잘못된것 인 지요?

장길석님....조언 부탁드립니다.