핸들 (컴퓨팅)
컴퓨터 프로그래밍에서 핸들(handle)은 응용 소프트웨어가 데이터베이스나 운영 체제와 같은 다른 시스템에서 관리되는 메모리 블록이나 객체(objects)를 참조할 때 사용되는 리소스에 대한 '추상적인 참조'다. 리소스 핸들은 불투명한 식별자가 될 수도 있고(이 경우에 보통 리소스의 종류를 관리하기 위한 배열 인덱스나 테이블을 나타내는 정수 번호로 사용된다) 또는 더 많은 정보에 접근할 수 있게 해주는 포인터가 될 수도 있다.
일반적인 리소스 핸들로는 파일 서술자, 네트워크 소켓, 데이터베이스 연결, 프로세스 식별자(PID) 등이 있다. 프로세스 ID나 작업 ID는 명시적으로 확인할 수 있는 정수이다. 하지만 파일 서술자나 소켓(종종 파일 서술자 형태로 구현되는)들은 정수로 표현되지만 일반적으로 불투명하게 여겨진다.
포인터와 비교
포인터가 참조하는 대상의 주소를 갖는 반면, 핸들은 외부적으로 관리되는 참조를 추상화한 것이다; 이것의 불투명함은 (포인터에서는 불가능한 것과 달리) 핸들을 무효화시키지 않고도 참조 대상이 시스템에 의해서 메모리에서 재배치될 수 있게 해준다. 간접 참조의 여분의 층 또한 관리하는 시스템의 동작(참조 대상에 대해 수행하는)이 할 수 있는 제어를 증가시킨다. 일반적으로 핸들은 전역 배열에 대한 인덱스이거나 포인터이다.
핸들 누수는 컴퓨터 프로그램이 자원에 대한 핸들을 요구하고 다 사용한 후에 놓지 않을 때 발생하는 소프트웨어 버그이다; 이것은 자원 누수의 형태로서 메모리를 가리키는 대한 포인터에 대한 메모리 누수와 비슷하다.
보안
컴퓨터 보안 용어로서, 핸들을 통한 자원에 대한 접근이 다른 시스템에 의해 가능해질 수 있기 때문에 핸들은 커퍼시티로서 기능한다. 이것은 객체에 대한 식별자 뿐만 아니라 접근 권한과도 연관된다. 예를 들면 파일 이름을 지어낼 수 있을 때, 핸들은 외부 시스템에서 사용자에게 주어지며 단순히 식별자가 아니라 주어진 접근 권한도 나타낸다.
예를 들면 만약 프로그램이 시스템 패스워드 파일(/etc/passwd)을 read/write 모드(O_RDWR)를 가지고 읽고자 할 때, 다음과 같은 호출을 통해 파일을 여려고 시도할 수 있다:
int fd = open("/etc/passwd", O_RDWR);
이 호출은 운영 체제가 구체적인 접근 권한을 가지고 특정한 파일을 열게끔 요청한다. 만약 운영 체제가 이것을 허용한다면 이것은 파일을 열고 핸들(파일 서술자, 이 테이블에 대한 인덱스)을 사용자에게 반환한다: 실제 접근은 운영 체제에 의해서 제어되지만 핸들은 그것의 토큰이다. 반대로 운영 체제가 접근을 거부한다면 파일을 열 수도 핸들을 반환할 수도 없다.
커퍼시티 기반 시스템에서 핸들은 연관된 접근 권한과 함께 프로세스 사이에서 전달될 수 있다. 참고로 이 경우에 핸들은 반드시 지어낼 수 있는 작은 정수가 아니어야 한다. 커퍼시티 기반 시스템이 아닌 경우에 각 프로세스는 반드시 자원의 식별과 요구되는 접근 권한을 명시하기 위하여 각각의 핸들을 얻어야 한다.
예시
핸들은 1980년대 운영 체제에서 메모리 관리를 위한 인기있는 해결책이었다.[1] C 표준 I/O 라이브러리에서 파일 데이터 구조체는 파일 핸들이다(유닉스에서는 파일 서술자이다). 다른 데스크톱 환경처럼 윈도우 API도 객체를 나타내고 운영 체제와 사용자 공간과의 통신을 위해 시스템에서 핸들을 매우 많이 사용한다. 예를 들면 데스크톱에서 윈도우는 핸들 타입 HWND 를 통해 나타낸다.
같이 보기
각주
- ↑ Hertzfeld, Andy (January 1982), 《The Original Macintosh: Hungarian》, 2010년 5월 10일에 확인함
외부 링크
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- 자료형