TCSETATTR(3)

명칭
cfgetispeed, cfsetispeed, cfgetospeed, cfsetospeed, cfsetspeed, cfmakeraw, tcgetattr, tcsetattr - termios 구조의 조작

프로그램 라이브러리
libc

서식
<termios.h> speed_t cfgetispeed(const struct termios *t) int cfsetispeed(struct termios *t, speed_t speed) speed_t cfgetospeed(const struct termios *t) int cfsetospeed(struct termios *t, speed_t speed) int cfsetspeed(struct termios *t, speed_t speed) void cfmakeraw(struct termios *t) int tcgetattr(int fd, struct termios *t) int tcsetattr(int fd, int action, const struct termios *t)

해설
cfmakeraw(), tcgetattr() 및 tcsetattr() 함수는, termios 구조의 취득 및 설정을 행하기 위한의 것입니다.

cfgetispeed(), cfsetispeed(), cfgetospeed(), cfsetospeed() 및 cfsetspeed() 함수는, termios 구조에 있어서의 baud rate의 취득 및 설정을 실시하기 위한 것입니다. 이하에 말하는 단말에 대한 함수의 효과는, tcsetattr() 함수가 불려 갈 때까지는 유효하게는 안되어, 모두 에러가 검출됩니다. tcsetattr() 함수에게 건네지는 baud rate의 특정의 값은, termios 구조로 설정되어 특별한 의미를 가집니다. 이것에 대해서는, tcsetattr() 함수를 설명하고 있는 메뉴얼 페이지에 말합니다.

baud rate의 취득과 설정
입력 및 출력의 baud rate는, termios 구조에 들어가 있습니다. 부호 없음의 정수 speed_t (은)는, 인클루드 파일 <termios.h> 중(안)에서 typedef 되고 있습니다. 그러나, 이 정수의 값은, 그것이 가리키는 baud rate에 직접 대응하고 있어, 다음과 같은 기호로 값이 정의되고 있습니다.

    #define B0      0
    #define B50     50
    #define B75     75
    #define B110    110
    #define B134    134
    #define B150    150
    #define B200    200
    #define B300    300
    #define B600    600
    #define B1200   1200
    #define B1800   1800
    #define B2400   2400
    #define B4800   4800
    #define B9600   9600
    #define B19200  19200
    #define B38400  38400
    #ifndef _POSIX_SOURCE
    #define EXTA    19200
    #define EXTB    38400
    #endif  /*_POSIX_SOURCE */

cfgetispeed() 함수는, tp 그리고 참조되는 termios 구조에 있어서의 입력 baud rate를 돌려줍니다.

cfsetispeed() 함수는, tp 그리고 참조되는 termios 구조에 있어서의 입력 baud rate를 speed 의 값으로 설정합니다.

cfgetospeed() 함수는, tp 그리고 참조되는 termios 구조에 있어서의 출력 baud rate를 돌려줍니다.

cfsetospeed() 함수는, tp 그리고 참조되는 termios 구조에 있어서의 출력 baud rate를 speed 의 값으로 설정합니다.

cfsetspeed() 함수는, tp 그리고 참조되는 termios 구조에 있어서의 입력 및 출력 baud rate의 양쪽 모두를 speed 의 값으로 설정합니다.

처리가 성공하면(자), cfsetispeed(), cfsetospeed() 및 cfsetspeed() (은)는 값 0 을 돌려줍니다. 그 이외의 경우는 -1 이라고 하는 값이 돌려주어져 에러를 나타낸다 글로벌 변수 errno 하지만 설정됩니다.

termios 상태의 취득과 설정
이 섹션에서는, 일반 단말 인터페이스를 제어하기 위해서 이용한다 함수에 대해 설명합니다. 특정의 명령에 대해 특히 설명문이 없는 한, 이러한 함수는 백그라운드 처리에 의한 사용에 대해서는 제한이 있습니다. 이러한 조작을 행하려고 하면(자), 그 처리 그룹에는 SIGTTOU 시그널이 보내집니다. 호출측 처리가 SIGTTOU 시그널을 블록 또는 무시했을 경우는, 그 처리는 조작을 실행하는 것이 용서되어 SIGTTOU 시그널은 송신되지 않습니다.

fd (은)는 여는 파일의 기술자입니다만, 모든 함수에 대해서는, 함수는 그것이 가리키는 특정의 파일 기술자에 관해서 열린 파일의 내용 뿐만이 아니라, 잠재적으로 관련하는 단말 파일에도 영향을 미칩니다.

cfmakeraw() 함수는, termios 구조에 보존된 플래그를 모든 입력 및 출력 처리를 무효로 하는 상태로 설정해, “생의 I/O 패스” (을)를 줍니다. 이 효과를 역전시키는 함수는 존재하지 않는 것에 주의해 주세요. 이것은, 유효하게 되돌릴 수가 있는 처리 옵션은 많이 있어, 올바른 방법은 tcgetattr() 함수를 사용해, 우선 cfmakeraw() 함수로 다음에 tcsetattr() 함수에 의해 생 모드를 설정해, 다음에도 한 번 tcsetattr() 함수를 보존 상태로 사용해 원의 단말 상태에 되돌려 현재의 단말 상태의 snapshot를 적용하는 방식이기 때문입니다.

tcgetattr() 함수는, tp 그리고 참조된다 termios 구조에 들어가 있다 fd 에 의해 참조되는 단말에 부수 하는 파라미터를 카피합니다. 이 함수는, 백그라운드 처리로부터 사용하는 것이 허락되고 있습니다만, 단말 애트리뷰트(attribute) (은)는 그 후로 foreground processing에 의해 변경되는 경우가 있습니다.

tcsetattr() 함수는, tp 에 의해 참조되는 termios 구조의 단말에 부수 하는 파라미터를 설정합니다. action 필드는, 인클루드 파일 <termios.h> 중(안)에서 지정된 대로, 이하의 값을 or 조작하는 것에 의해 작성됩니다.

TCSANOW
    변경은 즉시 행해집니다.

TCSADRAIN
    변경은, fd 에 쓰기모든 출력이 단말에 송신된 다음에 행해집니다. 출력에 영향을 주는 파라미터를 변경하는 경우에는, 이 action 값을 사용하지 않으면 안됩니다.

TCSAFLUSH
    변경은, fd 에 쓰기모든 출력이 단말에 송신된 다음에 행해집니다. 게다가, 수신되었지만 아직 읽어내지지 않은 모든 입력은 폐기됩니다.

TCSASOFT
    이 값이 action 값에 또는 조작되었을 경우는, c_cflag, c_ispeed 및 c_ospeed 필드의 값은 무시됩니다.

baud rate치 0 은, 접속을 종료하기 위해서 사용합니다. tcsetattr() 함수에 출력 속도 0 을 지정하면(자), 단말에 대해서 모뎀 제어를 주장하지 않고 , 단말의 접속을 자릅니다.

함수 tcsetattr() 에 입력 속도 0 을 지정했을 경우는, 입력 baud rate는 출력 baud rate로 지정된 것과 같은 값으로 설정됩니다.

함수 tcsetattr() 하지만 요구한 변경의 머지않아도 실시할 수가 없는 경우는, 값 -1 을 돌려줘 errno (을)를 설정합니다. 그 이외의 경우는, 요구된 변경 모든 것을 가능한 한 실시합니다. 지정한 입력 및 출력의 baud rate가 달라, 그 편성이 서포트되어 있지 않은 경우에는, 어느 쪽의 baud rate도 변경되지 않습니다.

처리가 성공해 완료하면(자), 함수 tcgetattr() 및 tcsetattr() (은)는 값 0 을 돌려줍니다. 그 이외의 경우는, 값 -1 을 돌려주어 에러를 나타내는 글로벌 변수 errno 하지만 다음과 같이 설정됩니다：

[EBADF]
    함수 tcgetattr() 또는 tcsetattr() 에 대한 인수 fd 하지만 유효한 파일 기술자가 아닙니다.

[EINTR]
    함수 tcsetattr() 하지만 시그널에 의해 중단되었습니다.

[EINVAL]
    함수 tcsetattr() 의 인수 action 하지만 유효하지 않은지, 또는 termios 구조안의 애트리뷰트(attribute) 를 서포트되어 있지 않은 값으로 변경하려고 하고 있습니다.

[ENOTTY]
    함수 tcgetattr() 또는 tcsetattr() 의 인수 fd 에 결합된 파일이, 단말이 아닙니다.

참조
tcsendbreak(3), termios(4)

표준
함수 tcgetattr(), tcsetattr() (은)는, p1003.1-88 표준에 적합하고 있다고 생각됩니다. 함수 cfmakeraw() 및 cfsetspeed() (은)는, tcsetattr() 함수의 TCSASOFT 옵션과 같게 p1003.1-88 표준의 확장입니다.