우분투 시리얼 통신 질문입니다.
      글쓴이: gksendbs / 작성시간: 화, 2012/10/30 - 5:03오후    
  
  아래 글이 수정이 안되서 다시 올립니다.ㅜㅜ
디바이스는 안드로이드기기인데 리눅스를 깔아놨구요
장치명은 ttyUSB0입니다.
그냥 이 디바이스로부터 들어오는 데이터를 읽기만 하면 됩니다.
그래서 저는 시리얼로 기기에서 보내는 데이터를 받고 싶은데
컴파일되고 실행도 되는데 실행하면 아무것도 뜨지 않습니다.
가만히 기다리면 segmentation fault가 뜹니다.
고수님들 도와주세요.ㅜㅜ
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
 
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/signal.h>
#include<sys/ioctl.h>
#include<sys/poll.h>
 
#include<termios.h>
 
int main(){
 
    int fd,rdcnt;
    char cc,buf[128];
    struct termios newtio;
 
    fd=open("/dev/ttyUSB0",O_RDWR|O_NOCTTY);
    if(fd<0){
        printf("device open fail /dev/tty0");
    }
    memset(&newtio,0,sizeof(newtio));
//    newtio.c_iflag=IGNPAR;
    newtio.c_oflag=0;
 
 
    newtio.c_cflag=B115200|CS8|CLOCAL|CREAD;
    newtio.c_lflag=IGNPAR;
    newtio.c_cc[VTIME]=0;
    newtio.c_cc[VMIN]=1;
 
    tcflush(fd,TCIFLUSH);
    tcsetattr(fd,TCSANOW,&newtio);
 
    while(1)
    {
        rdcnt=read(fd,&buf,1);
        if(rdcnt>0){
            buf[rdcnt]='\0';
            printf("<%s rc=/dev/tty0>%s\n",
                   rdcnt,buf);
            fflush(stdout);
        }
    }
    printf("Serial test end\n");
    close(fd);
    return 0;
}Forums: 


고수아니라서 죄송하고요. int
고수아니라서 죄송하고요.
int x; printf("%s", x);뭘 말씀하시는지 모르겠어요ㅣㅠㅠ
read한 것은 printf 하라는 말씀이신가요?
저 코드는 컴파일 타임에 경고를, 런타임에
저 코드는 컴파일 타임에 경고를, 런타임에 segmentation fault 를 발생시킵니다.
똑같은 버그가 본문에 적어주신 코드에도 있습니다.
그럼 read가 잘못됐다는 것인가요?
초보자의 질문에 대답해주셔서 감사합니다.
그럼 read에서 버퍼를 읽고 버퍼의 내용을 출력하는 printf에서
rdcnt가 int인데 %s로 출력해서 segmentation fault를 하신다는 말씀이시죠?
댓글 달기