tcsetattr 예제

이 모드는 고정된 수의 문자를 처리하고 문자 타이머를 허용합니다. 이 모드에서 입력은 라인으로 조립되지 않고 입력 처리가 발생하지 않습니다. 여기서는 읽기 전에 수신할 두 개의 매개 변수 시간과 최소 문자 수를 설정해야 하며, 예를 들어 최소 문자 수를 4로 설정해야 하고 타이머를 사용하지 않으려는 경우 VTIME 및 VMIN 문자를 설정하여 설정합니다. cfsetispeed() 및 cfsetospeed() 작업도 간단히 진행됩니다. 다음 예제에서는 stdin의 입력 속도를 9600 baud로 설정합니다. 장치가 프로그램의 끝에 재설정 될 수 있기 때문에 설정은 영구적이지 않습니다 : (tcsetattr을 통해) 또는 구조체 종말의 도움으로 (tcgetattr(를 통해)를 설정할 수있는 45 개 이상의 서로 다른 플래그가 있습니다. 많은 수의 플래그와 때로는 난해하고 병리학적인 의미와 행동이 유닉스의 직렬 프로그래밍이 어려울 수 있는 이유 중 하나입니다. 장치 구성에서 실수를 하지 않도록 주의해야 합니다. baud 요금을 변경하려는 경우 응용 프로그램은 tcsetattr()를 호출한 다음 tcgetattr()를 호출하여 실제로 선택된 baud 요금을 결정해야 합니다. 유닉스의 직렬 인터페이스의 50+ 속성은 단일 함수로 읽을 수 있습니다: tcgetattr(). 이러한 매개 변수 중에는 모든 옵션 플래그와 예를 들어 어떤 특수 문자 처리가 적용되는지에 대한 정보가 있습니다. 해당 함수의 서명은 다음과 같습니다: 요청된 작업 중 일부를 수행할 수 없는 경우에도 요청된 작업을 수행할 수 있는 경우 tcsetattr() 함수가 성공적으로 반환됩니다. 구현이 지원하는 모든 특성을 요청대로 설정하고 구현에서 지원되지 않는 모든 특성을 변경되지 않은 상태로 두어야 합니다.

요청의 일부를 존중할 수 없는 경우 -1을 반환하고 errno를 [EINVAL]으로 설정합니다. 입력 및 출력 baud 비율이 다르고 지원되지 않는 조합인 경우 baud 비율은 변경되지 않습니다. tcgetattr()에 대한 후속 호출은 터미널 장치의 실제 상태를 반환해야 합니다(이전 tcsetattr() 호출에서 변경된 내용과 변경되지 않은 변경 사항을 모두 반영). tcsetattr() 함수는 어떠한 상황에서도 용어 구조에 있는 값을 변경하지 않습니다. 직렬 장치를 연 후에는 baud 속도 또는 라인 절제와 같은 기본 구성을 원하는 매개 변수로 덮어써야 하는 것이 일반적입니다.

Posted in Uncategorized