FoundationsofGTKDevelopment:Appendix E
- 부록 E GError 타입
GError 타입
GLib은 오류 전파에 대해 GError라고 불리는 표준 방법을 제공한다. 이번 부록에서는 GTK+ 2.10 버전부터 제공되는 GError 도메인의 리스트와 함께 각 도메인에 해당하는 오류 타입을 소개하겠다.
GError 구조체는 세 가지 요소, 즉 오류 도메인, 메시지 문자열, 오류 코드를 제공한다.
struct GError
{
GQuark domain;
gchar *message;
gint code;
};
각 오류 도메인은 유사한 타입의 오류 집합을 나타낸다. 그 예제로 G_BOOKMARK_FILE_ERROR, GDK_PIXBUF_ERROR, G_FILE_ERROR를 들 수 있겠다. 이들은 항상 <NAMESPACE>_<MODULE>_ERROR 식으로 명명되는데, 네임스페이스는 함수를 포함하는 라이브러리이며 모듈은 위젯 또는 객체 타입을 나타낸다.
message는 사람이 읽을 수 있는 문자열로, 오류를 설명한다. 만일 발생한 오류 타입에 대해 사용자가 시각적 피드백을 기대할만한 상황이라면 개발자는 message를 출력해야 한다. 코드를 디버깅할 때도 매우 유용하게 사용된다.
오류 code는 도메인에서 발생한 오류에 특정적이다. 각 오류 코드는 도메인명 뒤에 오류 타입이 따라오는 형태로 구성된다. 가령, 오류 타입이 G_BOOKMARK_FILE_ERROR_INVALID_URI 라면 G_BOOKMARK_FILE_ERROR 도메인이 속하는 것이다.
대부분의 오류 코드 도메인에는 일반적인 실패 코드인 <NAMESPACE>_<MODULE>_ERROR_FAILED 도 포함되어 있다. 특정 오류를 이용할 수 없는 경우 이 코드가 리턴될 것이다.
표 E-1부터 E-14까지는 GTK+와 그것이 지원하는 라이브러리에서 발견되는 GError 열거의 참고자료를 모두 제공한다. 각 오류와 함께 무엇이 발생했는지에 대한 설명을 제공하겠다.
오류 값 | 설명 |
G_BOOKMARK_FILE_ERROR_INVALID_URI | 함수로 제공된 URI가 올바르게 포맷팅되지 않았다. |
G_BOOKMARK_FILE_ERROR_INVALID_VALUE | 요청한 필드를 찾을 수 없다. |
G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED | 요청한 애플리케이션이 북마크를 등록하지 않았다. |
G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND | 함수로 제공된 요청 URI를 찾을 수 없다. |
G_BOOKMARK_FILE_ERROR_READ | 문서가 올바로 포맷팅되지 않았다. |
G_BOOKMARK_FILE_ERROR_UNKNOWN_ENCODING | 파싱 중인 문서로 인해 알려지지 않은 인코딩이 실행되었다. |
G_BOOKMARK_FILE_ERROR_WRITE | 북마크를쓰는 데 실패하였다. 특정한 유형의 쓰기 오류가 발생하였다. |
G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND | 요청한 북마크 파일을 찾을 수 없다. |
표 E-1. GBookmarkFileError 열거 값 |
오류 값 | 설명 |
GDK_PIXBUF_ERROR_CORRUPT_IMAGE | 이미지 파일이 깨졌다. |
GDK_PIXBUF_ERROR_INSUFFICIENT_MEMORY | 이미지를 저장하기에 메모리가 충분하지 않다. |
GDK_PIXBUF_ERROR_BAD_OPTION | 올바르지 않은 옵션이 전달되었다. 이 오류는 이미지를 저장 시 발생할 수 있다. |
GDK_PIXBUF_ERROR_UNKNOWN_TYPE | 함수가 이미지 유형을 감지할 수 없다. |
GDK_PIXBUF_ERROR_UNSUPPORTED_OPERATION | 이 함수는명시된 이미지에서 연산을 실행할 수 없다. |
GDK_PIXBUF_ERROR_FAILED | 그 외 모든 오류에 대한 일반적 실패 코드다. |
표 E-2. GdkPixbufError 열거 값 |
오류 값 | 설명 |
G_FILE_ERROR_EXIST | 애플리케이션이 연산을 실행할 권한을 갖고 있지 않다. |
G_FILE_ERROR_ISDIR | 파일이 디렉터리여서 쓰기용으로 열 수 없다. |
G_FILE_ERROR_ACCESS | 파일 권한이 현재 연산을 허용하지 않는다. |
G_FILE_ERROR_NAMETOOLONG | 명시된 파일명이 너무 길다. |
G_FILE_ERROR_NOENT | 파일 또는 디렉터리가 존재하지 않는다. |
G_FILE_ERROR_NOTDIR | 명시된 위치가 디렉터리가 아닌데 옵션은 디렉터리를 필요로 한다. |
G_FILE_ERROR_NXIO | 파일이 위치한 장치를 찾을 수 없다. |
G_FILE_ERROR_NODEV | 파일 유형이 매핑을 지원하지 않는다. |
G_FILE_ERROR_ROFS | 파일 시스템이 읽기전용으로 되어 있다. |
G_FILE_ERROR_TXTBSY | 텍스트 파일이 현재 사용 중이다(busy). |
G_FILE_ERROR_FAULT | 올바르지 않은 메모리 위치를 향한 포인터가 전달되었다. |
G_FILE_ERROR_LOOP | 원형의 심볼릭 링크가 감지되었다. |
G_FILE_ERROR_NOSPC | 디스크가 가득 차서 이용할 수 있는 공간이 없다. |
G_FILE_ERROR_NOMEM | 이용할 수 있는 메모리가 없으며, 가상 메모리가 가득 찼다. |
G_FILE_ERROR_MFILE | 현재 프로세스에 너무 많은 오픈 파일이 있다. |
G_FILE_ERROR_NFILE | 전체 시스템에 너무 많은 파일이 열려 있다. |
G_FILE_ERROR_BADF | 쓰기에 읽기 파일 디스크립터가 명시되거나, 읽기에 쓰기 파일 디스크립터가 명시되었다. |
G_FILE_ERROR_INVAL | 올바르지 않은 인자(argument)가 전달되었다. |
G_FILE_ERROR_PIPE | 파이프가 깨졌거나 블로킹되었다. |
G_FILE_ERROR_AGAIN | 자원이 깨졌지만 조금 있다 다시 시도하면 작동할 수도 있다. |
G_FILE_ERROR_INTR | 함수 호출이 방해받았다. |
G_FILE_ERROR_IO | 디스크 상에서 읽기 또는 쓰기 오류가 발생하였다. |
G_FILE_ERROR_PERM | 연산이 허용되지 않는다. |
G_FILE_ERROR_NOSYS | 함수가 자신의 운영체제에 맞게 구현되지 않았다. |
G_FILE_ERROR_FAILED | 확인할 수 없는 이유로 연산이 실패하였다. |
표 E-3. GFileError 열거 값 |
오류 값 | 설명 |
G_KEY_FILE_ERROR_UNKNOWN_ENCODING | 파싱 중인 문서로 인해 알려지지 않은 인코딩이 실행되었다. |
G_KEY_FILE_ERROR_PARSE | 파싱 중인 문서가 올바로 포맷팅되지 않았다. |
G_KEY_FILE_ERROR_NOT_FOUND | 함수로 제공된 파일을 찾을 수 없다. |
G_KEY_FILE_ERROR_KEY_NOT_FOUND | 함수가 요청한 키를 찾을 수 없다. |
G_KEY_FILE_ERROR_GROUP_NOT_FOUND | 함수가 요청한 그룹을 찾을 수 없다. |
G_KEY_FILE_ERROR_INVALID_VALUE | 함수로 제공된 값이 성공적으로 파생되지 않았다. |
표 E-4. GKeyFileError 열거 값 |
오류 값 | 설명 |
G_MARKUP_ERROR_BAD_UTF8 | 파싱 중인 텍스트가 유효한 UTF-8 포맷으로 명시되지 않았다. 포맷팅을 변경하고 다시 시도할 필요가 있다. |
G_MARKUP_ERROR_EMPTY | 문서에 내용이 없거나 공백만 포함한다. |
G_MARKUP_ERROR_PARSE | 파싱 중인 문서가 올바로 포맷팅되지 않았다. |
G_MARKUP_ERROR_UNKNOWN_ELEMENT | 함수로 명시한 요소를 찾을 수 없다. 이 값은 GMarkupParser 함수에 의해서만 설정되어야 한다. |
G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE | 함수로 명시한 속성을 찾을 수 없다. 이 값은 GMarkupParser 함수에 의해서만 설정되어야 한다. |
G_MARKUP_ERROR_INVALID_CONTENT | 문서의 내용에 문제가 발생하여 오류를 야기하였다. 이 값은 GMarkupParser 함수에 의해서만 설정되어야 한다. |
표 E-5. GMarkupError 열거 값 |
오류 값 | 설명 |
G_OPTION_ERROR_UNKNOWN_OPTION | 파서가 함수로 제공된 옵션을 실현하지 않았다. 이 오류는GOptionContext를 설정하여 알려지지 않은 옵션을 무시하지 않을 때에만 보고될 것이다. |
G_OPTION_ERROR_BAD_VALUE | 값을 올바로 파싱할 수 없다. |
G_OPTION_ERROR_FAILED | GOptionArgFunc 타입의 콜백 함수가 실패하였다. |
표 E-6. GOptionError 열거 값 |
오류 값 | 설명 |
G_SHELL_ERROR_BAD_QUOTING | 쿼팅(Quoting)이 올바로 매치되지 않았거나 이해할 수 없다. |
G_SHELL_ERROR_EMPTY_STRING | 파싱될 문자열이 완전히 비어 있다. |
G_SHELL_ERROR_FAILED | 다른 타입의 GShellError가 발생하였다. 상세한 정보는 error->message 를 참고한다. |
표 E-7. GShellError 열거 값 |
오류 값 | 설명 |
G_SPAWN_ERROR_FORK | 이용 가능한 메모리가 부족하여 포크(fork)가 실패하였다. |
G_SPAWN_ERROR_READ | 파이프를 선택하거나 읽는 데에 실패하였다. |
G_SPAWN_ERROR_CHDIR | 작업 디렉터리를 성공적으로 변경하는 데 실패하였다. |
G_SPAWN_ERROR_ACCES | 경로 접두사에 대한 검색 권한이 거부되었거나, 새로운 파일이 일반 파일이 아니거나, 실행 권한이 거부되었거나, 파일의 실행이 비활성화된 채로 파일 시스템에 마운트되어 있었다(execv()가 EACCES를 실패하였다). |
G_SPAWN_ERROR_PERM | 프로세스의 권한이 올바르지 않아 연산이 허용되지 않았다 (execv()가 EPERM을 실패하였다). |
G_SPAWN_ERROR_2BIG | 시스템에서 설정한 한계로 인해 프로세스의 인자 리스트가 너무 길다 (execv()가 E2BIG을 실패하였다). |
G_SPAWN_ERROR_NOEXEC | 파일이 실행되는 데 필요한 권한을 갖고 있지 않다(execv()가 ENOEXEC를 실패하였다). |
G_SPAWN_ERROR_NAMETOOLONG | 전체 경로 또는 경로의 일부 길이가 최대 허용 길이를 초과하였다(execv()가 ENAMETOOLONG을 실패하였다). |
G_SPAWN_ERROR_NOENT | 프로세스 파일이 존재하지 않는다 (execv()가 ENOENT를 실패하였다). |
G_SPAWN_ERROR_NOMEM | 프로세스에 최대 가상 메모리 할당이 존재하며, 최대량보다 많은 메모리가 요구되었다(execv()가 ENOMEM을 실패하였다). |
G_SPAWN_ERROR_NOTDIR | 경로 접두사가 유효하지 않은 디렉터리를 가리켰다 (execv()가 ENOTDIR을 실패하였다). |
G_SPAWN_ERROR_LOOP | 함수가 경로에 대해 너무 많은 심볼릭 링크가 감지되었다 (execv()가 ELOOP를 실패하였다). |
G_SPAWN_ERROR_TXTBUSY | 다른 프로세스에서 이미 열려 있어서 해당 프로세스를 열 수 없다 (execv()가 ETXTBUSY를 실패하였다). |
G_SPAWN_ERROR_IO | 읽는 도중에 입력 또는 출력 오류가 발생하였다 (execv()가 EIO를 실패하였다). |
G_SPAWN_ERROR_NFILE | 시스템이 지원하는 오픈 파일의 최대 개수에 도달하였다 (execv()가 ENFILE를 실패하였다). |
G_SPAWN_ERROR_MFILE | 시스템이 하나의 프로세스에 지원하는 오픈 파일의 최대 개수에 도달하였다 (execv()가 EMFILE를 실패하였다). |
G_SPAWN_ERROR_INVAL | 함수로 전달된 매개변수가 올바로 포맷팅되지 않았다 (execv()가 EINVAL을 실패하였다). |
G_SPAWN_ERROR_ISDIR | 파일이 디렉터리로 발견되었고, 디렉터리에 지원되지 않는 연산의 실행이 시도되었다 (execv()가 EISDIR을 실패하였다). |
G_SPAWN_ERROR_LIBBAD | 접근을 시도한 공유 라이브러리가 손상되었다(execv()가 ELIBBAD를 실패하였다). |
G_SPAWN_ERROR_FAILED | 그 외 다른 치명적인 오류가 발생하였다. 상세한 정보는 error->message 를 참고한다. |
표 E-8. GSpawnError 열거 값 |
오류 값 | 설명 |
G_THREAD_ERROR_AGAIN | 쓰레드(thread)를 생성하는 데에 이용 가능한 자원이 충분하지 않았다. 이런 경우 조금 있다 다시 시도해야 한다. |
표 E-9. GThreadError 열거 값 |
오류 값 | 설명 |
GTK_FILE_CHOOSER_ERROR_NONEXISTENT | GtkFileChooser 로 명시한 파일이 존재하지 않는다. |
GTK_FILE_CHOOSER_ERROR_BAD_FILENAME | 함수로 명시한 파일명이 올바로 포맷팅되지 않았다. |
GTK_FILE_CHOOSER_ERROR_ALREADY_EXISTS | 함수로 명시한 파일명이 이미 존재한다. |
표 E-10. GtkFileChooserError 열거 값 |
오류 값 | 설명 |
GTK_ICON_THEME_NOT_FOUND | 함수에 매개변수로 명시된 아이콘이 GtkIconTheme에 존재하지 않는다. |
GTK_ICON_THEME_FAILED | 다른 타입의 GtkIconTheme 오류가 발생하였다. 상세한 정보는 error->message를 참고한다. |
표 E-11. GtkIconThemeError 열거 값 |
오류 값 | 설명 |
GTK_PRINT_ERROR_GENERAL | 일반적인 출력 오류가 발생하였다. 상세한 정보는 error->message를 참고한다. |
GTK_PRINT_ERROR_INTERNAL_ERROR | 출력 시스템에서 내부적으로 오류가 발생하였다. 사용자의 시스템에 문제가 발생했다는 의미다. |
GTK_PRINT_ERROR_NOMEM | 출력 연산을 계속하기에 메모리가 충분하지 않다. |
표 E-12. GtkPrintError 열거 값 |
오류 값 | 설명 |
GTK_RECENT_CHOOSER_ERROR_NOT_FOUND | 함수로 명시한 파일이 존재하지 않는다. |
GTK_RECENT_CHOOSER_ERROR_INVALID_URI | 함수로 명시한 URI가 올바로 포맷팅되지 않았다. |
표 E-13. GtkRecentChooserError 열거 값 |
오류 값 | 설명 |
GTK_RECENT_MANAGER_ERROR_NOT_FOUND | 함수로 명시한 URI가 리스트에 존재하지 않았다. |
GTK_RECENT_MANAGER_ERROR_INVALID_URI | 함수로 명시한 URI가 올바로 포맷팅되지 않았다. |
GTK_RECENT_MANAGER_ERROR_INVALID_ENCODING | 명시된 문자열이 UTF-8 인코딩으로 제공되지 않았다. |
GTK_RECENT_MANAGER_ERROR_NOT_REGISTERED | 함수로 명시한 항목이 어떤 애플리케이션에서도 등록되지 않았다. |
GTK_RECENT_MANAGER_ERROR_READ | 최근 사용한 자원 파일을 읽는 데 실패하였다. |
GTK_RECENT_MANAGER_ERROR_WRITE | 최근 사용한 자원 파일을 쓰는 데 실패하였다. |
GTK_RECENT_MANAGER_ERROR_UNKNOWN | 다른 타입의 오류가 발생하였다. 상세한 정보는 error->message를 참고한다. |
표 E-14. GtkRecentManagerError 열거 값 |