2011-11-23 4 views
1

저는 산업에서 기계적인 게이트를 제어하는 ​​PLC와 시리얼 포트를 통해 통신하려고했습니다. 이 주제에 익숙하지 않고 서두르다가 이전 설정을 저장하고 프로그램 종료시 복원하는 것이 중요하다는 사실을 알지 못했습니다. termios 구조체의 일부 필드를 변경 한 후에도 다른 포트 (ttyD0)와 똑같은 포트 기능을 사용한 후에도 포트에서 아무 것도 읽을 수 없었습니다. ttyD1을 다시 작동 상태로 복원 할 수있는 방법은 무엇입니까?리눅스에서 시리얼 포트 복구하기

int OpenPort() 
{ 
    fd = open("/dev/ttyD0", O_RDWR | O_NOCTTY); 

    if (fd < 0) 
    { 
     cerr << "open error " << errno << strerror(errno) << endl; 
    } 
    else 
    { 
     struct termios my_termios; 
     fcntl(fd, F_SETFL, 0); 
     tcgetattr(fd, &my_termios); 
     //bzero(&my_termios, sizeof(my_termios)); 
     tcflush(fd, TCIFLUSH);  
     my_termios.c_cflag = B115200 | CS8 | CREAD | CLOCAL | HUPCL; 
     //my_termios.c_lflag = ICANON; 
     //cfsetospeed(&my_termios, B115200); 
     tcsetattr(fd, TCSANOW, &my_termios); 
    } 
    return fd; 
} 
+0

'stty' ('man stty')를 사용하여 터미널 라인 설정을 가져 오거나 설정할 수 있습니다. 이렇게하면 어떻게해야 할 지 알 수 있으며,'strace'를 사용하여 코드를 작성하고 코드에 추가하는 방법을 볼 수 있습니다. – hochl

답변

0

그냥 첫 번째 tcgetattr로부터받은 구조체를 복사하고, 종료시 tcsetattr에게주고 다음과 같이 포트를 열기 위해 사용

코드입니다.