---
name: "modecanon"
section: "3"
platform: "macos"
package: "ksh"
version: "42"
release: "macOS 26.5"
platforms: ["macos"]
url: "https://new.carta.tech/modecanon"
---

# modecanon(3)

canonical file mode representation

## NAME

modecanon - canonical file mode representation

## SYNOPSIS

\#include \<modex.h\>

int    modei(int *external*); int    modex(int *internal*);

## DESCRIPTION

*POSIX threw out the file type bit macros and replaced them with* *function-like macros that test file type.* *This is bad in many ways, the worst of which is that it provides* *no way for a user program to synthesize file types in the mode bits.* [*pax*(1)](/pax/1.md), [*tar*(1)](/tar/1.md) *and* [*cpio*(1)](/cpio/1.md) *are examples of user programs that must convert between the internal mode* *representation and a private external representation.* *These routines provide a canonical external representation* *with macros to access and synthesize the bits in the external* *representation.*

$1$2modeimodeimodeimodeimodeimodeimodeimodei takes an external mode representation *external* and returns the equivalent internal representation.

$1$2modexmodexmodexmodexmodexmodexmodexmodex takes an internal mode representation *internal* and returns the equivalent external representation.

The traditional bit access macro (S\_ prefix changes to X\_) are: $1$2X\_IFMTX\_IFMTX\_IFMTX\_IFMTX\_IFMTX\_IFMTX\_IFMTX\_IFMT $1$2X\_IFSOCKX\_IFSOCKX\_IFSOCKX\_IFSOCKX\_IFSOCKX\_IFSOCKX\_IFSOCKX\_IFSOCK $1$2X\_IFLNKX\_IFLNKX\_IFLNKX\_IFLNKX\_IFLNKX\_IFLNKX\_IFLNKX\_IFLNK $1$2X\_IFCTGX\_IFCTGX\_IFCTGX\_IFCTGX\_IFCTGX\_IFCTGX\_IFCTGX\_IFCTG $1$2X\_IFREGX\_IFREGX\_IFREGX\_IFREGX\_IFREGX\_IFREGX\_IFREGX\_IFREG $1$2X\_IFBLKX\_IFBLKX\_IFBLKX\_IFBLKX\_IFBLKX\_IFBLKX\_IFBLKX\_IFBLK $1$2X\_IFDIRX\_IFDIRX\_IFDIRX\_IFDIRX\_IFDIRX\_IFDIRX\_IFDIRX\_IFDIR $1$2X\_IFCHRX\_IFCHRX\_IFCHRX\_IFCHRX\_IFCHRX\_IFCHRX\_IFCHRX\_IFCHR $1$2X\_IFIFOX\_IFIFOX\_IFIFOX\_IFIFOX\_IFIFOX\_IFIFOX\_IFIFOX\_IFIFO $1$2X\_IPERMX\_IPERMX\_IPERMX\_IPERMX\_IPERMX\_IPERMX\_IPERMX\_IPERM $1$2X\_ISUIDX\_ISUIDX\_ISUIDX\_ISUIDX\_ISUIDX\_ISUIDX\_ISUIDX\_ISUID $1$2X\_ISGIDX\_ISGIDX\_ISGIDX\_ISGIDX\_ISGIDX\_ISGIDX\_ISGIDX\_ISGID $1$2X\_ISVTXX\_ISVTXX\_ISVTXX\_ISVTXX\_ISVTXX\_ISVTXX\_ISVTXX\_ISVTX $1$2X\_IRUSRX\_IRUSRX\_IRUSRX\_IRUSRX\_IRUSRX\_IRUSRX\_IRUSRX\_IRUSR $1$2X\_IWUSRX\_IWUSRX\_IWUSRX\_IWUSRX\_IWUSRX\_IWUSRX\_IWUSRX\_IWUSR $1$2X\_IXUSRX\_IXUSRX\_IXUSRX\_IXUSRX\_IXUSRX\_IXUSRX\_IXUSRX\_IXUSR $1$2X\_IRGRPX\_IRGRPX\_IRGRPX\_IRGRPX\_IRGRPX\_IRGRPX\_IRGRPX\_IRGRP $1$2X\_IWGRPX\_IWGRPX\_IWGRPX\_IWGRPX\_IWGRPX\_IWGRPX\_IWGRPX\_IWGRP $1$2X\_IXGRPX\_IXGRPX\_IXGRPX\_IXGRPX\_IXGRPX\_IXGRPX\_IXGRPX\_IXGRP $1$2X\_IROTHX\_IROTHX\_IROTHX\_IROTHX\_IROTHX\_IROTHX\_IROTHX\_IROTH $1$2X\_IWOTHX\_IWOTHX\_IWOTHX\_IWOTHX\_IWOTHX\_IWOTHX\_IWOTHX\_IWOTH $1$2X\_IXOTHX\_IXOTHX\_IXOTHX\_IXOTHX\_IXOTHX\_IXOTHX\_IXOTHX\_IXOTH $1$2X\_IRWXUX\_IRWXUX\_IRWXUX\_IRWXUX\_IRWXUX\_IRWXUX\_IRWXUX\_IRWXU $1$2X\_IRWXGX\_IRWXGX\_IRWXGX\_IRWXGX\_IRWXGX\_IRWXGX\_IRWXGX\_IRWXG and $1$2X\_IRWXOX\_IRWXOX\_IRWXOX\_IRWXOX\_IRWXOX\_IRWXOX\_IRWXOX\_IRWXO returns the type bits for  *mode*.

## SEE ALSO

[pax(1)](/pax/1.md), [stat(2)](/stat/2.md)
