December 26, 2005 TYPES 5

### NAME

types - system data types

### SYNOPSIS

### DESCRIPTION

The file <```sys/types.h`> contains the defined data types used in the kernel (most are used throughout the system).

Note that in NetBSD code, when an integer of a specific width is needed, the C99 style should be used. The old BSD style are deprecated. ``

    #ifndef _SYS_TYPES_H_
    #define _SYS_TYPES_H_

    /* Machine type dependent parameters. */
    #include <machine/types.h>

    #include <machine/ansi.h>
    #include <machine/endian.h>

    #if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE)
    typedef unsigned char   u_char;
    typedef unsigned short  u_short;
    typedef unsigned int    u_int;
    typedef unsigned long   u_long;

    typedef unsigned char   unchar;         /* Sys V compatibility */
    typedef unsigned short  ushort;         /* Sys V compatibility */
    typedef unsigned int    uint;           /* Sys V compatibility */
    typedef unsigned long   ulong;          /* Sys V compatibility */
    #endif

    typedef uint64_t        u_quad_t;       /* quads */
    typedef int64_t         quad_t;
    typedef quad_t *        qaddr_t;

    typedef char *          caddr_t;        /* core address */
    typedef int32_t         daddr_t;        /* disk address */
    typedef int32_t         dev_t;          /* device number */
    typedef uint32_t        fixpt_t;        /* fixed point number */
    typedef uint32_t        gid_t;          /* group id */
    typedef uint32_t        ino_t;          /* inode number */
    typedef long            key_t;          /* IPC key (for Sys V IPC) */
    typedef uint16_t        mode_t;         /* permissions */
    typedef uint16_t        nlink_t;        /* link count */
    typedef quad_t          off_t;          /* file offset */
    typedef int32_t         pid_t;          /* process id */
    typedef quad_t          rlim_t;         /* resource limit */
    typedef int32_t         segsz_t;        /* segment size */
    typedef int32_t         swblk_t;        /* swap offset */
    typedef uint32_t        uid_t;          /* user id */

    #if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE)
    /* Major, minor numbers, dev_t's. */
    #define major(x)        ((int32_t)(((uint32_t)(x) >> 8) & 0xff))
    #define minor(x)        ((int32_t)((x) & 0xff))
    #define makedev(x,y)    ((dev_t)(((x) << 8) | (y)))
    #endif

    #ifdef  _BSD_CLOCK_T_
    typedef _BSD_CLOCK_T_   clock_t;
    #undef  _BSD_CLOCK_T_
    #endif

    #ifdef  _BSD_SIZE_T_
    typedef _BSD_SIZE_T_    size_t;
    #undef  _BSD_SIZE_T_
    #endif

    #ifdef  _BSD_SSIZE_T_
    typedef _BSD_SSIZE_T_   ssize_t;
    #undef  _BSD_SSIZE_T_
    #endif

    #ifdef  _BSD_TIME_T_
    typedef _BSD_TIME_T_    time_t;
    #undef  _BSD_TIME_T_
    #endif

    #ifdef  _BSD_CLOCKID_T_
    typedef _BSD_CLOCKID_T_ clockid_t;
    #undef  _BSD_CLOCKID_T_
    #endif

    #ifdef  _BSD_TIMER_T_
    typedef _BSD_TIMER_T_   timer_t;
    #undef  _BSD_TIMER_T_
    #endif

    #if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE)
    #define NBBY    8               /* number of bits in a byte */

    /*
     * Select uses bit masks of file descriptors in longs.  These macros
     * manipulate such bit fields (the filesystem macros use chars).
     * FD_SETSIZE may be defined by the user, but the default here should
     * be enough for most uses.
     */
    #ifndef FD_SETSIZE
    #define FD_SETSIZE      256
    #endif

    typedef int32_t fd_mask;
    #define NFDBITS (sizeof(fd_mask) * NBBY)        /* bits per mask */

    #ifndef howmany
    #define howmany(x, y)   (((x) + ((y) - 1)) / (y))
    #endif

    typedef struct fd_set {
            fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)];
    } fd_set;

    #define FD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
    #define FD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
    #define FD_ISSET(n, p)  ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
    #define FD_COPY(f, t)   memcpy(t, f, sizeof(*(f)))
    #define FD_ZERO(p)      memset(p, 0, sizeof(*(p)))

    #endif /* !defined(_POSIX_SOURCE) ... */
    #endif /* !_SYS_TYPES_H_ */

### SEE ALSO

lseek(2), select(2), truncate(2), byteorder(3), time(3), fs(5)

### HISTORY

A types file appeared in Version 7 `AT&T UNIX`.