NAME

system_data_types - 시스템 데이터 타입들 소개

DESCRIPTION

aiocb

INCLUDE: <aio.h>.

struct aiocb {
    int             aio_fildes;    /* 파일 디스크립터 */
    off_t           aio_offset;    /* 파일 오프셋 */
    volatile void  *aio_buf;       /* 버퍼 위치 */
    size_t          aio_nbytes;    /* 전송 길이 */
    int             aio_reqprio;   /* 요청 우선순위 오프셋 */
    struct sigevent aio_sigevent;  /* 시그널 번호와 값 */
    int             aio_lio_opcode;/* 수행할 동작 */
};

이 구조체에 대한 추가 정보는 aio(7)를 보라.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: aio_cancel(3), aio_error(3), aio_fsync(3), aio_read(3), aio_return(3), aio_suspend(3), aio_write(3), lio_listio(3)

clock_t

INCLUDE: <time.h><sys/types.h>. 또는 <sys/time.h>.

클럭 틱, 즉 (<time.h>에 정의돼 있는) CLOCKS_PER_SEC로 된 시스템 시간에 쓴다. POSIX에 따르면 정수 타입 또는 실수 부동소수점 타입이다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: times(2), clock(3)

clockid_t

INCLUDE: <sys/types.h>. 또는 <time.h>.

클럭 및 타이머 함수들에서 클럭 ID 타입으로 쓴다. POSIX에 따르면 산술형 타입으로 정의돼 있다.

CONFORMING TO: POSIX.1.2001 및 이후.

SEE ALSO: clock_adjtime(2), clock_getres(2), clock_nanosleep(2), timer_create(2), clock_getcpuclockid(3)

dev_t

INCLUDE: <sys/types.h>. 또는 <sys/stat.h>.

장치 ID에 쓴다. POSIX에 따르면 정수 타입이다. 이 타입에 대한 자세한 내용은 makedev(3)를 보라.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: mknod(2), stat(2)

div_t

INCLUDE: <stdlib.h>.

typedef struct {
    int quot; /* 몫 */
    int rem;  /* 나머지 */
} div_t;

div(3) 함수 반환 값의 타입이다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: div(3)

double_t

INCLUDE: <math.h>.

구현에서 최소 double 크기인 가장 효율적인 부동소수점 타입. (<float.h>에 정의돼 있는) FLT_EVAL_METHOD 매크로의 값에 따라 타입이 달라진다.

0 double_tdouble.
1 double_tdouble.
2 double_tlong double.

다른 FLT_EVAL_METHOD 값에서 double_t의 타입은 구현에서 정한다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: 이 페이지의 float_t 타입.

fd_set

INCLUDE: <sys/select.h>. 또는 <sys/time.h>.

파일 디스크립터 집합을 나타낼 수 있는 구조체 타입이다. POSIX에 따르면 fd_set 구조체에 들어가는 파일 디스크립터 최대 개수가 FD_SETSIZE 매크로 값이다.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: select(2)

fenv_t

INCLUDE: <fenv.h>.

제어 모드와 상태 플래그들을 포함한 부동소수점 환경 전체를 나타내는 타입이다. 자세한 내용은 fenv(3)를 보라.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: fenv(3)

fexcept_t

INCLUDE: <fenv.h>.

부동소수점 상태 플래그들 전체를 나타내는 타입이다. 자세한 내용은 fenv(3)를 보라.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: fenv(3)

FILE

INCLUDE: <stdio.h>. 또는 <wchar.h>.

스트림에 쓰는 오브젝트 타입.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: fclose(3), flockfile(3), fopen(3), fprintf(3), fread(3), fscanf(3), stdin(3), stdio(3)

float_t

INCLUDE: <math.h>.

구현에서 최소 float 크기인 가장 효율적인 부동소수점 타입. (<float.h>에 정의돼 있는) FLT_EVAL_METHOD 매크로의 값에 따라 타입이 달라진다.

0 float_tfloat.
1 float_tdouble.
2 float_tlong double.

다른 FLT_EVAL_METHOD 값에서 float_t의 타입은 구현에서 정한다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: 이 페이지의 double_t 타입.

gid_t

INCLUDE: <sys/types.h>. 또는 <grp.h>, <pwd.h>, <signal.h>, <stropts.h>, <sys/ipc.h>, <sys/stat.h>, <unistd.h>.

그룹 ID를 담는 데 쓰는 타입. POSIX에 따르면 정수 타입이다.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: chown(2), getgid(2), getegid(2), getgroups(2), getresgid(2), getgrnam(2), credentials(7)

id_t

INCLUDE: <sys/types.h>. 또는 <sys/resource.h>.

일반 식별자를 담는 데 쓰는 타입. POSIX에 따르면 pid_t, uid_t, gid_t를 담을 수 있는 정수 타입이다.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: getpriority(2), waitid(2)

imaxdiv_t

INCLUDE: <inttypes.h>.

typedef struct {
    intmax_t    quot; /* 몫 */
    intmax_t    rem;  /* 나머지 */
} imaxdiv_t;

imaxdiv(3) 함수 반환 값의 타입이다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: imaxdiv(3)

intmax_t

INCLUDE: <stdint.h>. 또는 <inttypes.h>.

구현에서 지원하는 어떤 부호 있는 정수 타입의 값이든 표현 가능한 부호 있는 정수 타입. C 언어 표준에 따르면 [INTMAX_MIN, INTMAX_MAX] 범위의 값을 저장할 수 있다.

INTMAX_C() 매크로는 인자를 intmax_t 타입의 정수 상수로 확장해 준다.

printf(3)scanf(3) 함수군에서 intmax_t의 길이 변환자는 j다. 그래서 intmax_t 값을 찍을 때 %jd%ji를 흔히 쓰게 된다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

BUGS: __int128이 정의돼 있고 long long이 128비트보다 작은 구현에서 intmax_t__int128 타입 값을 표현할 만큼 크지 않다.

SEE ALSO: 이 페이지의 uintmax_t 타입.

intN_t

INCLUDE: <stdint.h>. 또는 <inttypes.h>.

int8_t, int16_t, int32_t, int64_t

정확히 N비트 고정 크기인 부호 있는 정수 타입. N은 타입 이름에 있는 값이다. C 언어 표준에 따르면 [INTN_MIN, INTN_MAX] 범위의 값을 저장할 수 있다.

POSIX에 따르면 int8_t, int16_t, int32_t가 반드시 있다. int64_t는 64비트 정수 타입을 제공하는 구현에서만 반드시 있다. 이 형태의 그 외 타입들은 모두 선택적이다.

printf(3) 함수군에서 intN_t 타입의 길이 변환자는 (<inttypes.h>에 정의돼 있는) PRIdNPRIiN 형태 매크로를 확장한 것이다. 예를 들어 int64_t 값을 찍을 때는 %"PRId64"%"PRIi64"가 된다. scanf(3) 함수군에서 intN_t 타입의 길이 변환자는 (<inttypes.h>에 정의돼 있는) SCNdNSCNiN 형태 매크로를 확장한 것이다. 예를 들어 int8_t 값을 탐색할 때는 %"SCNd8"이나 %"SCNi8"이 된다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: 이 페이지의 intmax_t, uintN_t, uintmax_t 타입.

intptr_t

INCLUDE: <stdint.h>. 또는 <inttypes.h>.

유효한 어떤 (void *) 값이든 변환해서 넣고 뺄 수 있는 부호 있는 정수 타입. C 언어 표준에 따르면 [INTPTR_MIN, INTPTR_MAX] 범위의 값을 저장할 수 있다.

printf(3) 함수군에서 intptr_t의 길이 변환자는 (<inttypes.h>에 정의돼 있는) PRIdPTRPRIiPTR 매크로를 확장한 것이다. 그래서 intptr_t 값을 찍을 때 %"PRIdPTR"이나 %"PRIiPTR"을 흔히 쓰게 된다. scanf(3) 함수군에서 intptr_t의 길이 변환자는 (<inttypes.h>에 정의돼 있는) SCNdPTRSCNiPTR 매크로를 확장한 것이다. 그래서 intptr_t 값을 탐색할 때 %"SCNdPTR"이나 %"SCNiPTR"을 흔히 쓰게 된다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: 이 페이지의 uintptr_tvoid * 타입.

lconv

INCLUDE: <locale.h>

struct lconv {                  /* "C" 로캘에서의 값: */
    char   *decimal_point;      /* "." */
    char   *thousands_sep;      /* "" */
    char   *grouping;           /* "" */
    char   *mon_decimal_point;  /* "" */
    char   *mon_thousands_sep;  /* "" */
    char   *mon_grouping;       /* "" */
    char   *positive_sign;      /* "" */
    char   *negative_sign;      /* "" */
    char   *currency_symbol;    /* "" */
    char    frac_digits;        /* CHAR_MAX */
    char    p_cs_precedes;      /* CHAR_MAX */
    char    n_cs_precedes;      /* CHAR_MAX */
    char    p_sep_by_space;     /* CHAR_MAX */
    char    n_sep_by_space;     /* CHAR_MAX */
    char    p_sign_posn;        /* CHAR_MAX */
    char    n_sign_posn;        /* CHAR_MAX */
    char   *int_curr_symbol;    /* "" */
    char    int_frac_digits;    /* CHAR_MAX */
    char    int_p_cs_precedes;  /* CHAR_MAX */
    char    int_n_cs_precedes;  /* CHAR_MAX */
    char    int_p_sep_by_space; /* CHAR_MAX */
    char    int_n_sep_by_space; /* CHAR_MAX */
    char    int_p_sign_posn;    /* CHAR_MAX */
    char    int_n_sign_posn;    /* CHAR_MAX */
};

수 값의 서식과 관련된 멤버들을 담고 있다. "C" 로캘에서 멤버들의 값이 위 주석에 있다.

CONFORMING TO: C11 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: setlocale(3), localeconv(3), charsets(7), locale(7)

ldiv_t

INCLUDE: <stdlib.h>.

typedef struct {
    long    quot; /* 몫 */
    long    rem;  /* 나머지 */
} ldiv_t;

ldiv(3) 함수 반환 값의 타입이다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: ldiv(3)

lldiv_t

INCLUDE: <stdlib.h>.

typedef struct {
    long long   quot; /* 몫 */
    long long   rem;  /* 나머지 */
} lldiv_t;

lldiv(3) 함수 반환 값의 타입이다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: lldiv(3)

off64_t

INCLUDE: <sys/types.h>.

파일 크기에 쓴다. 64비트 부호 있는 정수 타입이다.

CONFORMING TO: glibc에 있다. C 언어 표준이나 POSIX에 표준화되어 있지 않다.

NOTES: 이 타입을 이용하려면 기능 확인 매크로 _LARGEFILE64_SOURCE가 정의돼 있어야 한다.

SEE ALSO: copy_file_range(2), readahead(2), sync_file_range(2), lseek64(3), feature_test_macros(7)

이 페이지의 off_t 타입도 참고.

off_t

INCLUDE: <sys/types.h>. 또는 <aio.h>, <fcntl.h>, <stdio.h>, <sys/mman.h>, <sys/stat.h>, <unistd.h>.

파일 크기에 쓴다. POSIX에 따르면 부호 있는 정수 타입이다.

VERSIONS: POSIX.1-2008부터 <aio.h><stdio.h>off_t를 정의한다.

CONFORMING TO: POSIX.1-2001 및 이후.

NOTES: 어떤 아키텍처에선 기능 확인 매크로 _FILE_OFFSET_BITS로 이 타입의 크기를 제어할 수 있다.

SEE ALSO: lseek(2), mmap(2), posix_fadvise(2), pread(2), truncate(2), fseeko(3), lockf(3), posix_fallocate(3), feature_test_macros(7)

이 페이지의 off64_t 타입도 참고.

pid_t

INCLUDE: <sys/types.h>. 또는 <fcntl.h>, <sched.h>, <signal.h>, <spawn.h>, <sys/msg.h>, <sys/sem.h>, <sys/shm.h>, <sys/wait.h>, <termios.h>, <time.h>, <unistd.h>, <utmpx.h>.

프로세스 ID, 프로세스 그룹 ID, 세션 ID 저장에 쓰는 타입. POSIX에 따르면 부호 있는 정수 타입이며, 구현에서 pid_t 크기가 long 타입보다 크지 않은 프로그래밍 환경을 한 가지 이상 지원한다.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: fork(2), getpid(2), getppid(2), getsid(2), gettid(2), getpgid(2), kill(2), pidfd_open(2), sched_setscheduler(2), waitpid(2), sigqueue(3), credentials(7)

ptrdiff_t

INCLUDE: <stddef.h>.

항목 개수와 배열 인덱스에 쓴다. 두 포인터로 뺄셈을 한 결과다. C 언어 표준에 따르면 [PTRDIFF_MIN, PTRDIFF_MAX] 범위의 값을 저장할 수 있다.

printf(3)scanf(3) 함수군에서 ptrdiff_t의 길이 변환자는 t다. 그래서 ptrdiff_t 값을 찍을 때 %td%ti를 흔히 쓰게 된다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: 이 페이지의 size_tssize_t 타입.

regex_t

INCLUDE: <regex.h>

typedef struct {
    size_t  re_nsub; /* 괄호로 감싼 하위식 수 */
} regex_t;

정규 표현식 검사에 쓰는 구조체 타입이다. regcomp(3)로 컴파일한 정규 표현식을 담는다.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: regex(3)

regmatch_t

INCLUDE: <regex.h>

typedef struct {
    regoff_t    rm_so; /* 문자열 시작점 기준
                          하위 문자열 시작점의 바이트 오프셋 */
    regoff_t    rm_eo; /* 문자열 시작점 기준
                          하위 문자열 끝 다음 첫 문자의
                          바이트 오프셋 */
} regmatch_t;

정규 표현식 검사에 쓰는 구조체 타입이다.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: regexec(3)

regoff_t

INCLUDE: <regex.h>

POSIX에 따르면 ptrdiff_t 타입이나 ssize_t 타입 중 한쪽에 저장할 수 있는 가장 큰 값을 저장할 수 있는 부호 있는 정수 타입이다.

VERSIONS: POSIX.1-2008 전에선 off_t 타입이나 ssize_t 타입 중 한쪽에 저장할 수 있는 가장 큰 값을 저장할 수 있었다.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: 이 페이지의 regmatch_t 구조체와 ptrdiff_tssize_t 타입.

sigevent

INCLUDE: <signal.h>. 또는 <aio.h>, <mqueue.h>, <time.h>.

struct sigevent {
    int             sigev_notify; /* 알림 종류 */
    int             sigev_signo;  /* 시그널 번호 */
    union sigval    sigev_value;  /* 시그널 값 */
    void          (*sigev_notify_function)(union sigval);
                                  /* 알림 함수 */
    pthread_attr_t *sigev_notify_attributes;
                                  /* 알림 속성 */
};

이 타입에 대한 자세한 내용은 sigevent(7)를 보라.

VERSIONS: POSIX.1-2008부터 <aio.h><time.h>sigevent를 정의한다.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: timer_create(2), getaddrinfo_a(3), lio_listio(3), mq_notify(3)

이 페이지의 aiocb 구조체도 참고.

siginfo_t

INCLUDE: <signal.h>. 또는 <sys/wait.h>.

typedef struct {
    int      si_signo;  /* 시그널 번호 */
    int      si_code;   /* 시그널 코드 */
    pid_t    si_pid;    /* 송신 프로세스 ID */
    uid_t    si_uid;    /* 송신 프로세스의 실제 사용자 ID */
    void    *si_addr;   /* 폴트 유발 인스트럭션의 주소 */
    int      si_status; /* 종료 값 또는 시그널 */
    union sigval si_value;  /* 시그널 값 */
} siginfo_t;

시그널 연관 정보. 이 구조체에 대한 (리눅스 전용 추가 필드들을 포함한) 자세한 내용은 sigaction(2)을 보라.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: pidfd_send_signal(2), rt_sigqueueinfo(2), sigaction(2), sigwaitinfo(2), psiginfo(3)

sigset_t

INCLUDE: <signal.h>. 또는 <spawn.h><sys/select.h>.

시그널 집합을 나타내는 타입이다. POSIX에 따르면 정수 또는 구조체 타입이다.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: epoll_pwait(2), ppoll(2), pselect(2), sigaction(2), signalfd(2), sigpending(2), sigprocmask(2), sigsuspend(2), sigwaitinfo(2), signal(7)

sigval

INCLUDE: <signal.h>.

union sigval {
    int     sigval_int; /* 정수 값 */
    void   *sigval_ptr; /* 포인터 값 */
};

시그널과 함께 전달되는 데이터.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: pthread_sigqueue(3), sigqueue(3), sigevent(7)

이 페이지의 sigevent 구조체와 siginfo_t 타입도 참고.

size_t

INCLUDE: <stddef.h><sys/types.h>. 또는 <aio.h>, <glob.h>, <grp.h>, <iconv.h>, <monetary.h>, <mqueue.h>, <ndbm.h>, <pwd.h>, <regex.h>, <search.h>, <signal.h>, <stdio.h>, <stdlib.h>, <string.h>, <strings.h>, <sys/mman.h>, <sys/msg.h>, <sys/sem.h>, <sys/shm.h>, <sys/socket.h>, <sys/uio.h>, <time.h>, <unistd.h>, <wchar.h>, <wordexp.h>.

바이트 개수에 쓴다. sizeof 연산자의 결과다. C 언어 표준에 따르면 [0, SIZE_MAX] 범위의 값을 저장할 수 있는 부호 없는 정수 타입이다. POSIX에 따르면 구현에서 size_t 크기가 long 타입보다 크지 않은 프로그래밍 환경을 한 가지 이상 지원한다.

printf(3)scanf(3) 함수군에서 size_t의 길이 변환자는 z다. 그래서 size_t 값을 찍을 때 %zu%zx를 흔히 쓰게 된다.

VERSIONS: POSIX.1-2008부터 <aio.h>, <glob.h>, <grp.h>, <iconv.h>, <mqueue.h>, <pwd.h>, <signal.h>, <sys/socket.h>size_t를 정의한다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: read(2), write(2), fread(3), fwrite(3), memcmp(3), memcpy(3), memset(3), offsetof(3)

이 페이지의 ptrdiff_tssize_t 타입도 참고.

ssize_t

INCLUDE: <sys/types.h>. 또는 <aio.h>, <monetary.h>, <mqueue.h>, <stdio.h>, <sys/msg.h>, <sys/socket.h>, <sys/uio.h>, <unistd.h>.

바이트 개수 또는 오류 표시에 쓴다. POSIX에 따르면 적어도 [-1, SSIZE_MAX] 범위의 값을 저장할 수 있는 부호 있는 정수 타입이며, 구현에서 ssize_t 크기가 long 타입보다 크지 않은 프로그래밍 환경을 한 가지 이상 지원한다.

glibc와 대다수의 다른 구현에서 printf(3)scanf(3) 함수군을 위한 ssize_t의 길이 변환자를 z로 제공한다. 그래서 ssize_t 값을 찍을 때 %zd%zi를 흔히 쓰게 된다. 대다수 구현에서 ssize_tz가 동작하긴 하지만 이식 가능한 POSIX 프로그램에선 이용을 피하는 게 좋다. 예를 들어 값을 intmax_t로 변환하고 그에 맞는 길이 변환자(j)를 쓰면 된다.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: read(2), readlink(2), readv(2), recv(2), send(2) write(2)

이 페이지의 ptrdiff_tsize_t 타입도 참고.

suseconds_t

INCLUDE: <sys/types.h>. 또는 <sys/select.h><sys/time.h>.

마이크로초 단위 시간에 쓴다. POSIX에 따르면 적어도 [-1, 1000000] 범위의 값을 저장할 수 있는 부호 있는 정수 타입이며, 구현에서 suseconds_t 크기가 long 타입보다 크지 않은 프로그래밍 환경을 한 가지 이상 지원한다.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: 이 페이지의 timeval 구조체.

time_t

INCLUDE: <time.h><sys/types.h>. 또는 <sched.h>, <sys/msg.h>, <sys/select.h>, <sys/sem.h>, <sys/shm.h>, <sys/stat.h>, <sys/time.h>, <utime.h>.

초 단위 시간에 쓴다. POSIX에 따르면 정수 타입이다.

VERSIONS: POSIX.1-2008부터 <sched.h>time_t를 정의한다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: stime(2), time(2), ctime(3), difftime(3)

timer_t

INCLUDE: <sys/types.h>. 또는 <time.h>.

timer_create(2)가 반환하는 타이머 ID에 쓴다. POSIX에 따르면 이 타입에 대해 정의된 비교 연산자나 할당 연산자가 없다.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: timer_create(2), timer_delete(2), timer_getoverrun(2), timer_settime(2)

timespec

INCLUDE: <time.h>. 또는 <aio.h>, <mqueue.h>, <sched.h>, <signal.h>, <sys/select.h>, <sys/stat.h>.

struct timespec {
    time_t  tv_sec;  /* 초 */
    long    tv_nsec; /* 나노초 */
};

초와 나노초로 시간을 기술한다.

CONFORMING TO: C11 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: clock_gettime(2), clock_nanosleep(2), nanosleep(2), timerfd_gettime(2), timer_gettime(2)

timeval

INCLUDE: <sys/time.h>. 또는 <sys/resource.h>, <sys/select.h>, <utmpx.h>.

struct timeval {
    time_t      tv_sec;  /* 초 */
    suseconds_t tv_usec; /* 마이크로초 */
};

초와 마이크로초로 시간을 기술한다.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: gettimeofday(2), select(2), utimes(2), adjtime(3), futimes(3), timeradd(3)

uid_t

INCLUDE: <sys/types.h>. 또는 <pwd.h>, <signal.h>, <stropts.h>, <sys/ipc.h>, <sys/stat.h>, <unistd.h>.

사용자 ID를 담는 데 쓰는 타입. POSIX에 따르면 정수 타입이다.

CONFORMING TO: POSIX.1-2001 및 이후.

SEE ALSO: chown(2), getuid(2), geteuid(2), getresuid(2), getpwnam(2), credentials(7)

uintmax_t

INCLUDE: <stdint.h>. 또는 <inttypes.h>.

구현에서 지원하는 어떤 부호 없는 정수 타입의 값이든 표현 가능한 부호 없는 정수 타입. C 언어 표준에 따르면 [0, UINTMAX_MAX] 범위의 값을 저장할 수 있다.

UINTMAX_C() 매크로는 인자를 uintmax_t 타입의 정수 상수로 확장해 준다.

printf(3)scanf(3) 함수군에서 uintmax_t의 길이 변환자는 j다. 그래서 uintmax_t 값을 찍을 때 %ju%jx를 흔히 쓰게 된다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

BUGS: unsigned __int128이 정의돼 있고 unsigned long long이 128비트보다 작은 구현에서 uintmax_tunsigned __int128 타입 값을 표현할 만큼 크지 않다.

SEE ALSO: 이 페이지의 intmax_t 타입.

uintN_t

INCLUDE: <stdint.h>. 또는 <inttypes.h>.

uint8_t, uint16_t, uint32_t, uint64_t

정확히 N비트 고정 크기인 부호 없는 정수 타입. N은 타입 이름에 있는 값이다. C 언어 표준에 따르면 [0, UINTN_MAX] 범위의 값을 저장할 수 있다.

POSIX에 따르면 uint8_t, uint16_t, uint32_t가 반드시 있다. uint64_t는 64비트 정수 타입을 제공하는 구현에서만 반드시 있다. 이 형태의 그 외 타입들은 모두 선택적이다.

printf(3) 함수군에서 uintN_t 타입의 길이 변환자는 (<inttypes.h>에 정의돼 있는) PRIuN, PRIoN, PRIxN, PRIXN 형태 매크로를 확장한 것이다. 예를 들어 uint32_t 값을 찍을 때는 %"PRIu32"%"PRIx32"가 된다. scanf(3) 함수군에서 uintN_t 타입의 길이 변환자는 (<inttypes.h>에 정의돼 있는) SCNuN,SCNoN, SCNxN, SCNXN 형태 매크로를 확장한 것이다. 예를 들어 uint16_t 값을 탐색할 때는 %"SCNu16"이나 %"SCNx16"이 된다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: 이 페이지의 intmax_t, intN_t, uintmax_t 타입.

uintptr_t

INCLUDE: <stdint.h>. 또는 <inttypes.h>.

유효한 어떤 (void *) 값이든 변환해서 넣고 뺄 수 있는 부호 없는 정수 타입. C 언어 표준에 따르면 [0, UINTPTR_MAX] 범위의 값을 저장할 수 있다.

printf(3) 함수군에서 uintptr_t의 길이 변환자는 (<inttypes.h>에 정의돼 있는) PRIuPTR, PRIoPTR, PRIxPTR, PRIXPTR 매크로를 확장한 것이다. 그래서 uintptr_t 값을 찍을 때 %"PRIuPTR"이나 %"PRIxPTR"을 흔히 쓰게 된다. scanf(3) 함수군에서 uintptr_t의 길이 변환자는 (<inttypes.h>에 정의돼 있는) SCNuPTR, SCNoPTR, SCNxPTR, SCNXPTR 매크로를 확장한 것이다. 그래서 uintptr_t 값을 탐색할 때 %"SCNuPTR"이나 %"SCNxPTR"을 흔히 쓰게 된다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: 이 페이지의 intptr_tvoid * 타입.

va_list

INCLUDE: <stdarg.h>. 또는 <stdio.h><wchar.h>.

가변 타입 가변 개수 인자가 있는 함수에서 쓴다. 함수에서 va_list 타입 객체를 선언해야 하며 va_start(3), va_arg(3), va_copy(3), va_end(3) 매크로로 인자 목록을 순회한다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: va_start(3), va_arg(3), va_copy(3), va_end(3)

void *

C 언어 표준에 따르면 모든 객체의 포인터와 void 포인터를 서로 변환할 수 있다. 더 나아가 POSIX에서는 함수 포인터까지 포함한 모든 포인터와 void 포인터를 서로 변환할 수 있기를 요구한다.

다른 포인터 타입과의 변환은 묵시적으로 이뤄지며 캐스팅이 전혀 필요치 않다. 이런 동작 때문에 어떤 종류의 타입 검사도 불가능해진다는 점에 유의하자. 프로그래머는 void * 값을 기반 데이터와 호환되지 않는 타입으로 변환하지 않도록 유의해야 한다. 규정되지 않은 동작이 일어나게 되기 때문이다.

임의 타입의 값을 전달할 수 있으므로 함수 매개변수와 반환 값에 유용하다. void 포인터를 통해 함수로 전달되는 데이터의 진짜 타입을 알 수 있는 어떤 메커니즘이 있는 게 보통이다.

이 타입의 값을 따라갈 수 없다. 그러면 void 타입이 나올 텐데, 그건 불가능하기 때문이다. 마찬가지로 이 타입으로 포인터 산술을 할 수 없다. 하지만 GNU C에서는 표준 확장으로 포인터 산술을 허용한다. void나 함수의 크기를 1로 해서 동작한다. void와 함수 타입에 sizeof도 허용되며, 1을 반환한다.

printf(3)scanf(3) 함수군에서 void *의 변환 지정자는 p이다.

VERSIONS: void *와 함수 포인터 간 호환성에 대한 POSIX 요구 사항은 POSIX.1-2008 기술 정오표 1(2013년)에서 추가되었다.

CONFORMING TO: C99 및 이후. POSIX.1-2001 및 이후.

SEE ALSO: malloc(3), memcmp(3), memcpy(3), memset(3)

이 페이지의 intptr_tuintptr_t 타입도 참고.

NOTES

이 매뉴얼 페이지에서 기술하는 구조체들은 적어도 그 정의에 나와 있는 멤버들을 가지고 있다. 단, 그 순서는 정해져 있지 않다.

이 페이지에서 기술하는 정수 타입 대다수에는 printf(3)scanf(3) 함수군을 위한 대응하는 길이 변환자가 없다. 길이 변환자가 없는 정수 타입의 값을 찍으려면 명시적 캐스팅으로 intmax_tuintmax_t로 변환하는 게 좋다. 길이 변환자가 없는 정수 타입의 변수로 탐색해서 넣으려면 intmax_tuintmax_t 타입의 중간 임시 변수를 쓰는 게 좋다. 그 임시 변수에서 대상 변수로 복사할 때 값이 넘칠 수도 있다. 타입에 상한 및 하한이 있다면 값을 실제 복사하기 전에 값이 그 범위 안에 있는지 검사해 보는 게 좋다. 아래 예에서 어떻게 그런 변환을 해야 하는지 보인다.

페이지 작성 방식

"CONFORMING TO"에서는 C99 및 이후, 그리고 POSIX.1-2001 및 이후만 고려한다. 일부 타입은 더 이른 표준 버전에 명세돼 있을 수도 있지만 단순함을 위해 더 이른 표준의 내용은 생략한다.

"INCLUDE"에서는 먼저 C나 POSIX.1 표준에 따라 그 타입을 정의하는 "주된" 헤더(들)을 적는다. "또는" 다음에는 그 타입을 정의하게 된다고 표준에서 명시한 추가 헤더들을 적는다.

EXAMPLES

아래 프로그램은 길이 변환자가 없는 정수 타입을 문자열에서 탐색하고 변수에 저장된 값을 찍는다. 위의 NOTES 절에서 설명한 대로 적절히 intmax_t와 변환하고 적절히 범위 검사를 한다.

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>

int
main (void)
{
    static const char *const str = "500000 us in half a second";
    suseconds_t us;
    intmax_t    tmp;

    /* 문자열에서 수를 탐색해서 임시 변수에 넣기. */

    sscanf(str, "%jd", &tmp);

    /* 값이 suseconds_t의 유효 범위에 있는지 확인하기. */

    if (tmp < -1 || tmp > 1000000) {
        fprintf(stderr, "Scanned value outside valid range!\n");
        exit(EXIT_FAILURE);
    }

    /* 그 값을 suseconds_t 변수 'us'로 복사하기. */

    us = tmp;

    /* suseconds_t가 -1 값을 담을 수 있긴 하지만 합리적인
       마이크로초 수는 아니다. */

    if (us < 0) {
        fprintf(stderr, "Scanned value shouldn't be negative!\n");
        exit(EXIT_FAILURE);
    }

    /* 값 찍기. */

    printf("There are %jd microseconds in half a second.\n",
            (intmax_t) us);

    exit(EXIT_SUCCESS);
}

SEE ALSO

feature_test_macros(7), standards(7)


2021-03-22