---
name: "major"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/makedev"
---

# major(3)

manage a device number

Part of [makedev(3)](/makedev/3.md).

## NAME

makedev, major, minor - manage a device number

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <sys/sysmacros.h>
```

**dev\_t makedev(unsigned int** *maj***, unsigned int** *min***);**

**unsigned int major(dev\_t** *dev***);** **unsigned int minor(dev\_t** *dev***);**

## DESCRIPTION

A device ID consists of two parts: a major ID, identifying the class of the device, and a minor ID, identifying a specific instance of a device in that class. A device ID is represented using the type *dev\_t*.

Given major and minor device IDs, **makedev**() combines these to produce a device ID, returned as the function result. This device ID can be given to [**mknod**(2)](/mknod/2.md), for example.

The **major**() and **minor**() functions perform the converse task: given a device ID, they return, respectively, the major and minor components. These macros can be useful to, for example, decompose the device IDs in the structure returned by [**stat**(2)](/stat/2.md).

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **makedev**(), **major**(), **minor**() | Thread safety | MT-Safe |

## VERSIONS

The BSDs expose the definitions for these macros via *\<sys/types.h\>*.

## STANDARDS

None.

## HISTORY

BSD, HP-UX, Solaris, AIX, Irix.

These interfaces are defined as macros. Since glibc 2.3.3, they have been aliases for three GNU-specific functions: **gnu\_dev\_makedev**(), **gnu\_dev\_major**(), and **gnu\_dev\_minor**(). The latter names are exported, but the traditional names are more portable.

Depending on the version, glibc also exposes definitions for these macros from *\<sys/types.h\>* if suitable feature test macros are defined. However, this behavior was deprecated in glibc 2.25, and since glibc 2.28, *\<sys/types.h\>* no longer provides these definitions.

## SEE ALSO

[**mknod**(2)](/mknod/2.md), [**stat**(2)](/stat/2.md)
