FoundationsofGTKDevelopment:Appendix E

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
부록 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 열거 값


Notes