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), tar(1) and cpio(1) 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.