mirror of https://github.com/mkerrisk/man-pages
146 lines
5.1 KiB
Groff
146 lines
5.1 KiB
Groff
|
.\" Hey Emacs! This file is -*- nroff -*- source.
|
||
|
.\"
|
||
|
.\" This manpage is Copyright (C) 2006, Michael Kerrisk
|
||
|
.\"
|
||
|
.\" Permission is granted to make and distribute verbatim copies of this
|
||
|
.\" manual provided the copyright notice and this permission notice are
|
||
|
.\" preserved on all copies.
|
||
|
.\"
|
||
|
.\" Permission is granted to copy and distribute modified versions of this
|
||
|
.\" manual under the conditions for verbatim copying, provided that the
|
||
|
.\" entire resulting derived work is distributed under the terms of a
|
||
|
.\" permission notice identical to this one.
|
||
|
.\"
|
||
|
.\" Since the Linux kernel and libraries are constantly changing, this
|
||
|
.\" manual page may be incorrect or out-of-date. The author(s) assume no
|
||
|
.\" responsibility for errors or omissions, or for damages resulting from
|
||
|
.\" the use of the information contained herein. The author(s) may not
|
||
|
.\" have taken the same level of care in the production of this manual,
|
||
|
.\" which is licensed free of charge, as they might when working
|
||
|
.\" professionally.
|
||
|
.\"
|
||
|
.\" Formatted or processed versions of this manual, if unaccompanied by
|
||
|
.\" the source, must acknowledge the copyright and authors of this work.
|
||
|
.\"
|
||
|
.\"
|
||
|
.TH FTM 7 2006-04-26 "Linux" "Linux Programmer's Manual"
|
||
|
.SH NAME
|
||
|
ftm \- feature test macros
|
||
|
.SH SYNOPSIS
|
||
|
.nf
|
||
|
.B #include <features.h>
|
||
|
.SH DESCRIPTION
|
||
|
Feature test macros allow the programmer to control the definitions that
|
||
|
are exposed by system header files when a program is compiled.
|
||
|
This can be useful for creating portable applications,
|
||
|
by preventing non-standard definitions from being exposed.
|
||
|
Other macros can be used to expose non-standard definitions that
|
||
|
are not exposed by default.
|
||
|
The precise effects of each of the feature test macros described below
|
||
|
can be ascertained by inspecting the
|
||
|
.I <features.h>
|
||
|
header file.
|
||
|
|
||
|
In order to be effective, a feature test macro
|
||
|
.IR "must be defined before including any header files" .
|
||
|
This can either be done in the compilation command
|
||
|
.RI ( "cc -DMACRO=value" )
|
||
|
or by defining the macro within the source code before
|
||
|
including any headers.
|
||
|
|
||
|
Linux/glibc understands the following feature test macros:
|
||
|
.TP
|
||
|
.B _POSIX_C_SOURCE
|
||
|
Defining this macro with the value 1 causes header files to expose
|
||
|
definitions conforming to POSIX.1-1990 and ISO C (1990).
|
||
|
Defining with the value 199309 or greater additionally exposes
|
||
|
definitions for POSIX.1b (real-time extensions).
|
||
|
Defining with the value 199506 or greater additionally exposes
|
||
|
definitions for POSIX.1c (threads).
|
||
|
Defining with the value 200112 exposes definitions corresponding
|
||
|
to the POSIX.1-2001 base specification (excluding the XSI extension).
|
||
|
.TP
|
||
|
.B _POSIX_C_SOURCE
|
||
|
Defining this obsolete macro with any value is equivalent to defining
|
||
|
.B _POSIX_C_SOURCE
|
||
|
with the value 1.
|
||
|
.TP
|
||
|
.B _XOPEN_SOURCE
|
||
|
Defining this macro with any value causes header files to expose
|
||
|
definitions conforming to POSIX.1, POSIX.2, and XPG4.
|
||
|
Defining with the value 500 or greater additionally exposes
|
||
|
definitions for SUSv2 (UNIX 98).
|
||
|
Defining with the value 600 or greater additionally exposes
|
||
|
definitions for SUSv3 (UNIX 03; i.e., the POSIX.1 base specification
|
||
|
plus the XSI extension) and C 99 definitions.
|
||
|
.TP
|
||
|
.B _XOPEN_SOURCE_EXTENDED
|
||
|
If this macro is defined with the value 1, and the
|
||
|
.BR _XOPEN_SOURCE
|
||
|
is defined, then expose definitions corresponding to the XPG4v2
|
||
|
UNIX extensions.
|
||
|
.TP
|
||
|
.B _ISOC99_SOURCE
|
||
|
Exposes C 99 extensions to IOC C (1990).
|
||
|
.TP
|
||
|
.B _LARGEFILE64_SOURCE
|
||
|
Expose definitions for the alternative API specified by the
|
||
|
LFS (Large File Summit) as a "transitional extension" the
|
||
|
Single UNIX Specification.
|
||
|
.TP
|
||
|
.B _FILE_OFFSET_BITS
|
||
|
Defining this macro with the value 64
|
||
|
automatically converts references to 32-bit functions and data types
|
||
|
related to file I/O and file system operations into references to
|
||
|
their 64-bit counterparts.
|
||
|
This is useful for performing I/O on large files (> 2 Gigabytes)
|
||
|
on 32-bit systems.
|
||
|
.TP
|
||
|
.B _BSD_SOURCE
|
||
|
Defining this macro with any value cause header files to expose
|
||
|
BSD-derived definitions.
|
||
|
Defining this macro also causes BSD definitions to be preferred in
|
||
|
some situations where standards conflict.
|
||
|
.TP
|
||
|
.B _SVID_SOURCE
|
||
|
Defining this macro with any value cause header files to expose
|
||
|
System V-derived definitions.
|
||
|
(SVID == System V Interface Definition.)
|
||
|
.TP
|
||
|
.B _GNU_SOURCE
|
||
|
Defining this macro (with any value) is equivalent to defining
|
||
|
.BR _BSD_SOURCE ,
|
||
|
.BR _SVID_SOURCE ,
|
||
|
.BR _LARGEFILE64_SOURCE ,
|
||
|
.BR _ISOC99_SOURCE
|
||
|
.BR _POSIX_C_SOURCE
|
||
|
with the value 1999506,
|
||
|
and
|
||
|
.BR _XOPEN_SOURCE
|
||
|
with the value 600.
|
||
|
In addition, various GNU-specific extensions are also exposed.
|
||
|
.SH CONFORMING TO
|
||
|
POSIX.1 specifies
|
||
|
.BR _POSIX_C_SOURCE ,
|
||
|
.BR _POSIX_SOURCE ,
|
||
|
and
|
||
|
.BR _XOPEN_SOURCE .
|
||
|
.BR _XOPEN_SOURCE_EXTENDED
|
||
|
was specified by XPG4v2 (aka SUSv1).
|
||
|
.BR _FILE_OFFSET_BITS
|
||
|
is not specified by any standard,
|
||
|
but is employed on some other implementations.
|
||
|
.BR _BSD_SOURCE ,
|
||
|
.BR _SVID_SOURCE ,
|
||
|
and
|
||
|
.BR _GNU_SOURCE
|
||
|
are Linux (glibc) specific.
|
||
|
.SH NOTES
|
||
|
.I <features.h>
|
||
|
is a Linux/glibc specific header file.
|
||
|
Other systems have an analogous file, but typically with a different name.
|
||
|
This header file is automatically included by other header files as
|
||
|
required: it is not necessary to explicitly include it in order to
|
||
|
employ feature test macros.
|
||
|
.SH "SEE ALSO"
|