WIPIVERSE

Termcap

정의
Termcap(terminal capability)는 유닉스 및 유닉스 계열 운영체제에서 터미널(콘솔) 장치의 기능과 동작을 설명하는 데이터베이스 형식의 파일이다. 프로그램이 터미널 종류에 관계없이 일관된 화면 출력을 할 수 있도록, 각 터미널이 지원하는 제어 문자열·능력(예: 커서 이동, 색상, 지우기 등)을 이름(name)과 값(value) 형태로 정의한다.

역사

  • 1970년대 후반, 베르트람(버클리) 소프트웨어 개발 그룹에서 초기 터미널 제어 방식으로 Termcap을 구현하였다.
  • 초기 베르트람 유닉스 배포판에 포함돼, 다양한 하드웨어 터미널을 지원하는 데 핵심 역할을 했다.
  • 1990년대 초, 보다 구조화된 데이터베이스인 terminfo가 개발되면서 Termcap는 점차 대체되었으나, 기존 소프트웨어와의 호환성을 위해 여전히 사용된다.

구조
Termcap 파일은 일반적으로 /etc/termcap 혹은 사용자의 홈 디렉터리(~/.termcap)에 저장되며, 각 항목은 다음과 같은 형식을 가진다.

tty-type|alias|description:capname1=value1:capname2=value2:...
  • tty-type : 터미널 종류를 나타내는 고유 식별자(예: vt100)
  • alias : 별칭(여러 별칭을 파이프 | 로 구분)
  • capname : capability name(예: cl – 화면 전체 지우기, cm – 커서 이동)
  • value : 해당 capability에 대한 제어 문자열

주요 capability 예시

Capability 의미 예시 제어 문자열
cl 화면 전체 지우기 \E[H\E[2J
cm 커서 이동 (row, col) \E[%i%p1%d;%p2%dH
ho 홈 위치(좌상단) \E[H
sf 한 줄 아래로 스크롤 `
`
le 커서를 왼쪽으로 한 칸 이동 \b

사용 방법
프로그램은 tgetent(), tgetstr(), tgetnum(), tparm() 등 표준 C 라이브러리 함수를 통해 Termcap 데이터베이스에 접근한다.

#include <curses.h>
#include <term.h>

char *termtype = getenv("TERM");
char *buf = tgoto(tigetstr("cm"), col, row);
tputs(buf, 1, putchar);

위와 같은 호출은 현재 터미널 타입에 맞는 커서 이동 문자열을 얻어 출력한다.

관련 기술

  • terminfo: BSD 계열에서 개발된, 보다 풍부한 데이터 형식을 가진 터미널 capability 데이터베이스. terminfo는 바이트 단위가 아닌 구조화된 바이너리 형식으로 저장되어 빠른 검색이 가능하다. 많은 최신 시스템은 terminfo를 기본으로 사용하지만, ncurses 라이브러리는 termcap 호환 레이어를 제공한다.
  • ncurses: GNU 프로젝트에서 제공하는 텍스트 기반 UI 라이브러리로, terminfo 및 termcap 모두를 지원한다.

현재 상황

  • 대부분의 현대 리눅스 배포판에서는 terminfo가 기본이며, termcap 파일은 호환성을 위해 제한적으로 유지된다.
  • 일부 임베디드 시스템·구형 유닉스 환경에서는 아직도 termcap이 주요 터미널 정의 방식으로 사용된다.

참고

  • AT&T UNIX System V Release 4 Manual, “termcap – terminal capability database”
  • ncurses 공식 문서, “Terminfo/Termcap Compatibility”
  • The Open Group Base Specifications, “termcap(5)”

(※ 본 내용은 공개된 기술 문서와 표준 사양을 기반으로 작성되었으며, 추가적인 최신 업데이트가 있을 경우 해당 자료를 참고한다.)

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기