standards(5)




NAME

     standards, ANSI, C, C++, ISO, POSIX, POSIX.1, POSIX.2,  SUS,
     SUSv2, SVID, SVID3, XNS, XNS4, XNS5, XPG, XPG3, XPG4, XPG4v2
     - standards and specifications supported by Solaris


DESCRIPTION

     Solaris 9supports IEEE Std 1003.1 and IEEE Std 1003.2,  com-
     monly  known  as POSIX.1 and POSIX.2, respectively. The fol-
     lowing table lists each version of these  standards  with  a
     brief  description  and  the  SunOS  or Solaris release that
     first conformed to it.

     POSIX Standard             Description                  Release
     POSIX.1-1988     system interfaces and headers     SunOS 4.1
     POSIX.1-1990     POSIX.1-1988 update               Solaris 2.0
     POSIX.1b-1993    realtime extensions               Solaris 2.4
     POSIX.1c-1996    threads extensions                Solaris 2.6
     POSIX.2-1992     shell and utilities               Solaris 2.5
     POSIX.2a-1992    interactive shell and utilities   Solaris 2.5

     Solaris  9also   supports  the  X/Open  Common  Applications
     Environment (CAE) Portability Guide Issue 3 (XPG3) and Issue
     4 (XPG4), Single UNIX  Specification  (SUS,  also  known  as
     XPG4v2),  and  Single UNIX Specification, Version 2 (SUSv2).
     Both XPG4  and  SUS  include  Networking  Services  Issue  4
     (XNS4). SUSv2 includes Networking Services Issue 5 (XNS5).

     The following table lists each X/Open specification  with  a
     brief  description  and  the  SunOS  or Solaris release that
     first conformed to it.

     X/Open CAE Specification          Description                Release
     XPG3                       superset  of  POSIX.1-1988   SunOS 4.1
                                containing  utilities from
                                SVID3
     XPG4                       superset of  POSIX.1-1990,   Solaris 2.4
                                POSIX.2-1992,          and
                                POSIX.2a-1992   containing
                                extensions  to POSIX stan-
                                dards from XPG3
     SUS (XPG4v2)               superset of XPG4  contain-   Solaris 2.6
                                ing  historical BSD inter-
                                faces widely used by  com-
                                mon application packages
     XNS4                       sockets and XTI interfaces   Solaris 2.6
     SUSv2                      superset of  SUS  extended   Solaris 7
                                to  support POSIX.1b-1993,
                                POSIX.1c-1996, and ISO/IEC
                                9899  (C  Standard) Amend-
                                ment 1

     XNS5                       superset  and   LP64-clean   Solaris 7
                                derivative of XNS4.

     The XNS4 specification is safe for use only  in  ILP32  (32-
     bit)  environments  and should not be used for LP64 (64-bit)
     application environments. Use  XNS5,  which  has  LP64-clean
     interfaces  that are portable across ILP32 and LP64 environ-
     ments. Solaris releases 7 through 9 support both  the  ILP32
     and ILP64 enviornments.

     Solaris releases 7 through 9 have been branded to conform to
     The Open Group's UNIX 98 Product Standard.

     Solaris releases 2.0 through 9 support the interfaces speci-
     fied  by  the  System V Interface Definition, Third Edition,
     Volumes 1 through 4 (SVID3).  Note, however, that since  the
     developers of this specification (UNIX Systems Laboratories)
     are no longer  in  business  and  since  this  specification
     defers to POSIX and X/Open CAE specifications, there is some
     disagreement about what is currently  required  for  confor-
     mance to this specification.

     When Sun WorkShop  Compiler  C  4.2  is  installed,  Solaris
     releases 2.0 through 9 support the ANSI X3.159-1989 Program-
     ming Language - C and ISO/IEC 9899:1990 Programming Language
     - C (C) interfaces.

     When Sun WorkShop  Compiler  C  5.0  is  installed,  Solaris
     releases  7 through 9 also support ISO/IEC 9899 Amendment 1:
     C Integrity.

     When Sun WorkShop Compiler C++  5.0  is  installed,  Solaris
     releases 2.5.1 through 9 support ISO/IEC 14882:1998 Program-
     ming Languages - C++.  Unsupported features of that standard
     are  described in the compiler README file.  The features of
     the C++ standard adopted from ISO/IEC 9899 Amendement 1  are
     not  supported on Solaris 2.5.1, and are only partially sup-
     ported on Solaris 2.6.

  Utilities
     If the behavior required by POSIX.2, POSIX.2a, XPG4, SUS, or
     SUSv2  conflicts  with  historical Solaris utility behavior,
     the original Solaris version of the utility is unchanged;  a
     new version that is standard-conforming has been provided in
     /usr/xpg4/bin. For applications wishing to take advantage of
     POSIX.2,  POSIX.2a,  XPG4,  SUS, or SUSv2 features, the PATH
     (sh or ksh) or path (csh) environment  variables  should  be
     set  with  /usr/xpg4/bin  preceding any other directories in
     which  utilities   specified  by  those  specifications  are
     found, such as /bin, /usr/bin, /usr/ucb, and /usr/ccs/bin.

  Feature Test Macros
     Feature test macros are used  by  applications  to  indicate
     additional  sets  of  features that are desired beyond those
     specified by the C standard. If  an  application  uses  only
     those  interfaces  and headers defined by a particular stan-
     dard (such as POSIX or  X/Open  CAE),   then  it  need  only
     define  the appropriate feature test macro specified by that
     standard. If the application is using interfaces and headers
     not  defined  by that standard, then in addition to defining
     the appropriate standard feature test macro,  it  must  also
     define  __EXTENSIONS__. Defining __EXTENSIONS__ provides the
     application with access to all interfaces and headers not in
     conflict  with  the specified standard. The application must
     define __EXTENSIONS__ either at compile time or  within  the
     applicatio'n source files.

  ANSI/ISO C
     No feature test macros need to be defined to  indicate  that
     an application is a conforming C application.

  ANSI/ISO C++
     ANSI/ISO C++ does not define any feature test macros. If the
     standard C++ announcement macro __cplusplus is predefined to
     value  199711  or  greater,  the  compiler  operates  in   a
     standard-conforming  mode,  indicating C++ standards confor-
     mance. The value 199711  indicates  conformance  to  ISO/IEC
     14882:1998,  as required by that standard.  (As noted above,
     conformance to the standard  is  incomplete.)   A  standard-
     conforming mode is not available with compilers prior to Sun
     WorkShop C++ 5.0.

     C++ bindings are not defined for POSIX  or  X/Open  CAE,  so
     specifying  feature  test  macros  such as _POSIX_SOURCE and
     _XOPEN_SOURCE can result in compilation errors due  to  con-
     flicting  requirements  of standard C++ and those specifica-
     tions.

  POSIX
     Applications that are  intended  to  be  conforming  POSIX.1
     applications  must  define the feature test macros specified
     by the standard before including any headers.  For the stan-
     dards  listed  below,  applications  must define the feature
     test macros listed.   Application  writers  must  check  the
     corresponding standards for other macros that can be queried
     to determine if desired options are supported by the  imple-
     mentation.

           POSIX Standard                  Feature Test Macros
     POSIX.1-1990                  _POSIX_SOURCE

     POSIX.1-1990 and              _POSIX_SOURCE and _POSIX_C_SOURCE=2
       POSIX.2-1992
       C-Language
       Bindings Option
     POSIX.1b-1993                 _POSIX_C_SOURCE=199309L
     POSIX.1c-1996                 _POSIX_C_SOURCE=199506L

  SVID3
     The SVID3 specification does not specify  any  feature  test
     macros  to  indicate  that an application is written to meet
     SVID3 requirements.  The  SVID3  specification  was  written
     before the C standard was completed.

  X/Open CAE
     To build or compile an application that conforms to  one  of
     the X/Open CAE specifications, use the following guidelines.
     Applications need not set the POSIX feature test  macros  if
     they require both CAE and POSIX functionality.

     XPG3  The application must define _XOPEN_SOURCE with a value
           other than 500 (preferably 1).

     XPG4  The application must define _XOPEN_SOURCE with a value
           other    than    500    (preferably    1)    and   set
           _XOPEN_VERSION=4.

     SUS (XPG4v2)
           The application must define _XOPEN_SOURCE with a value
           other    than    500    (preferably    1)    and   set
           _XOPEN_SOURCE_EXTENDED=1.

     SUSv2 The application must define _XOPEN_SOURCE=500.

  Compilation
     A POSIX.2-, XPG4-, SUS-, or SUSv2-conforming  implementation
     must   include   an   ANSI  X3.159-1989  (ANSI  C  Language)
     standard-conforming compilation system and the  cc  and  c89
     utilities.  Solaris  7 through 9 were tested with the cc and
     c89 utilities and the compilation  system  provided  by  Sun
     WorkShop  Compiler  C 5.0 in the SPARC and x86 environments.
     When cc is used to link  applications,  /usr/ccs/lib/values-
     xpg4.o  must be specified on any link/load command line, but
     the preferred way to build applications is described below.

     An XNS4- or XNS5-conforming application must include -l  XNS
     on  any  link/load  command line in addition to defining the
     feature test macros specified  for  SUS  or  SUSv2,  respec-
     tively.

     If  the  compiler  suppports  the  redefine_extname   pragma
     feature  (the  Sun  WorkShop Compiler C 4.2 and Sun WorkShop
     Compiler    C    5.0    compilers    define    the     macro
     __PRAGMA_REDEFINE_EXTNAME  to indicate that it supports this
     feature),   then   the   standard   headers   use    #pragma
     redefine_extname  directives  to properly map function names
     onto library entry point names. This mapping  provides  full
     support for ISO C, POSIX, and X/Open namespace reservations.
     The Sun WorkShop  Compiler C 5.0 compiler was used  for  all
     branding  and  certification  tests  for  Solaris releases 7
     through 9.

     If this pragma feature is not supported by the compiler, the
     headers  use  the #define directive to map internal function
     names onto appropriate library entry point  names.  In  this
     instance,  applications  should avoid using the explicit 64-
     bit file offset symbols listed on the lf64(5)  manual  page,
     since these names are used by the implementation to name the
     alternative entry points.

     When using Sun WorkShop Compiler C  5.0,  applications  con-
     forming  to  the  specifications listed above should be com-
     piled using the utilities and flags indicated in the follow-
     ing table:

         Specification       Compiler/Flags        Feature Test Macros
     ANSI/ISO C              c89              none
     SVID3                   cc -Xt           none
     POSIX.1-1990            c89              _POSIX_SOURCE
     POSIX.1-1990 and        c89              _POSIX_SOURCE  and
       POSIX.2-1992                             POSIX_C_SOURCE=2
       C-Language
       Bindings Option
     POSIX.1b-1993           c89              _POSIX_C_SOURCE=199309L
     POSIX.1c-1996           c89              _POSIX_C_SOURCE=199506L
     CAE XPG3                cc -Xa           _XOPEN_SOURCE
     CAE XPG4                c89              _XOPEN_SOURCE and
                                                _XOPEN_VERSION=4
     SUS (CAE XPG4v2)        c89              _XOPEN_SOURCE and
       (includes XNS4)                          _XOPEN_SOURCE_EXTENDED=1
     SUSv2 (includes XNS5)   c89              _XOPEN_SOURCE=500

     For  platforms  supporting  the  LP64  (64-bit)  programming
     environment  where  the SC5.0 Compilers have been installed,
     SUSv2-conforming LP64 applications using XNS5 library  calls
     should be built with command lines of the form:

     c89 $(getconf XBS5_LP64_OFF64_CFLAGS) -D_XOPEN_SOURCE=500 \
         $(getconf XBS5_LP64_OFF64_LDFLAGS) foo.c -o foo \
         $(getconf XBS5_LP64_OFF64_LIBS) -lxnet


SEE ALSO


     sysconf(3C), environ(5), lf64(5)


Man(1) output converted with man2html