Files
oldlinux-files/Ref-docs/POSIX/susv3/xrat/port.html
2024-02-19 00:21:47 -05:00

1569 lines
74 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link type="text/css" rel="stylesheet" href="style.css"><!-- Generated by The Open Group's rhtm tool v1.2.1 -->
<!-- Copyright (c) 2001 The Open Group, All Rights Reserved -->
<title>Portability Considerations (Informative)</title>
</head>
<body bgcolor="white">
<basefont size="3"> <!--header start-->
<center><font size="2">The Open Group Base Specifications Issue 6<br>
IEEE Std 1003.1-2001<br>
Copyright &copy; 2001 The IEEE and The Open Group, All Rights reserved.</font></center>
<!--header end-->
<hr size="2" noshade>
<h2><a name="tag_04"></a>Portability Considerations (Informative)</h2>
<p>This section contains information to satisfy various international requirements:</p>
<ul>
<li>
<p><a href="#tag_04_01">User Requirements</a> describes perceived user requirements.</p>
</li>
<li>
<p><a href="#tag_04_02">Portability Capabilities</a> indicates how the facilities of IEEE&nbsp;Std&nbsp;1003.1-2001 satisfy those
requirements.</p>
</li>
<li>
<p><a href="#tag_04_03">Profiling Considerations</a> offers guidance to writers of profiles on how the configurable options,
limits, and optional behavior of IEEE&nbsp;Std&nbsp;1003.1-2001 should be cited in profiles.</p>
</li>
</ul>
<h3><a name="tag_04_01"></a>User Requirements</h3>
<p>This section describes the user requirements that were perceived by the developers of IEEE&nbsp;Std&nbsp;1003.1-2001. The
primary source for these requirements was an analysis of historical practice in widespread use, as typified by the base documents
listed in <a href="xbd_chap01.html#tag_01_01_01"><i>Scope</i></a> .</p>
<p>IEEE&nbsp;Std&nbsp;1003.1-2001 addresses the needs of users requiring open systems solutions for source code portability of
applications. It currently addresses users requiring open systems solutions for source-code portability of applications involving
multi-programming and process management (creating processes, signaling, and so on); access to files and directories in a hierarchy
of file systems (opening, reading, writing, deleting files, and so on); access to asynchronous communications ports and other
special devices; access to information about other users of the system; facilities supporting applications requiring bounded
(realtime) response.</p>
<p>The following users are identified for IEEE&nbsp;Std&nbsp;1003.1-2001:</p>
<ul>
<li>
<p>Those employing applications written in high-level languages, such as C, Ada, or FORTRAN.</p>
</li>
<li>
<p>Users who desire conforming applications that do not necessarily require the characteristics of high-level languages (for
example, the speed of execution of compiled languages or the relative security of source code intellectual property inherent in the
compilation process).</p>
</li>
<li>
<p>Users who desire conforming applications that can be developed quickly and can be modified readily without the use of compilers
and other system components that may be unavailable on small systems or those without special application development
capabilities.</p>
</li>
<li>
<p>Users who interact with a system to achieve general-purpose time-sharing capabilities common to most business or government
offices or academic environments: editing, filing, inter-user communications, printing, and so on.</p>
</li>
<li>
<p>Users who develop applications for POSIX-conformant systems.</p>
</li>
<li>
<p>Users who develop applications for UNIX systems.</p>
</li>
</ul>
<p>An acknowledged restriction on applicable users is that they are limited to the group of individuals who are familiar with the
style of interaction characteristic of historically-derived systems based on one of the UNIX operating systems (as opposed to other
historical systems with different models, such as MS/DOS, Macintosh, VMS, MVS, and so on). Typical users would include program
developers, engineers, or general-purpose time-sharing users.</p>
<p>The requirements of users of IEEE&nbsp;Std&nbsp;1003.1-2001 can be summarized as a single goal: <i>application source
portability</i>. The requirements of the user are stated in terms of the requirements of portability of applications. This in turn
becomes a requirement for a standardized set of syntax and semantics for operations commonly found on many operating systems.</p>
<p>The following sections list the perceived requirements for application portability.</p>
<h4><a name="tag_04_01_01"></a>Configuration Interrogation</h4>
<p>An application must be able to determine whether and how certain optional features are provided and to identify the system upon
which it is running, so that it may appropriately adapt to its environment.</p>
<p>Applications must have sufficient information to adapt to varying behaviors of the system.</p>
<h4><a name="tag_04_01_02"></a>Process Management</h4>
<p>An application must be able to manage itself, either as a single process or as multiple processes. Applications must be able to
manage other processes when appropriate.</p>
<p>Applications must be able to identify, control, create, and delete processes, and there must be communication of information
between processes and to and from the system.</p>
<p>Applications must be able to use multiple flows of control with a process (threads) and synchronize operations between these
flows of control.</p>
<h4><a name="tag_04_01_03"></a>Access to Data</h4>
<p>Applications must be able to operate on the data stored on the system, access it, and transmit it to other applications.
Information must have protection from unauthorized or accidental access or modification.</p>
<h4><a name="tag_04_01_04"></a>Access to the Environment</h4>
<p>Applications must be able to access the external environment to communicate their input and results.</p>
<h4><a name="tag_04_01_05"></a>Access to Determinism and Performance Enhancements</h4>
<p>Applications must have sufficient control of resource allocation to ensure the timeliness of interactions with external
objects.</p>
<h4><a name="tag_04_01_06"></a>Operating System-Dependent Profile</h4>
<p>The capabilities of the operating system may make certain optional characteristics of the base language in effect no longer
optional, and this should be specified.</p>
<h4><a name="tag_04_01_07"></a>I/O Interaction</h4>
<p>The interaction between the C language I/O subsystem ( <i>stdio</i>) and the I/O subsystem of IEEE&nbsp;Std&nbsp;1003.1-2001
must be specified.</p>
<h4><a name="tag_04_01_08"></a>Internationalization Interaction</h4>
<p>The effects of the environment of IEEE&nbsp;Std&nbsp;1003.1-2001 on the internationalization facilities of the C language must
be specified.</p>
<h4><a name="tag_04_01_09"></a>C-Language Extensions</h4>
<p>Certain functions in the C language must be extended to support the additional capabilities provided by
IEEE&nbsp;Std&nbsp;1003.1-2001.</p>
<h4><a name="tag_04_01_10"></a>Command Language</h4>
<p>Users should be able to define procedures that combine simple tools and/or applications into higher-level components that
perform to the specific needs of the user. The user should be able to store, recall, use, and modify these procedures. These
procedures should employ a powerful command language that is used for recurring tasks in conforming applications (scripts) in the
same way that it is used interactively to accomplish one-time tasks. The language and the utilities that it uses must be consistent
between systems to reduce errors and retraining.</p>
<h4><a name="tag_04_01_11"></a>Interactive Facilities</h4>
<p>Use the system to accomplish individual tasks at an interactive terminal. The interface should be consistent, intuitive, and
offer usability enhancements to increase the productivity of terminal users, reduce errors, and minimize retraining costs. Online
documentation or usage assistance should be available.</p>
<h4><a name="tag_04_01_12"></a>Accomplish Multiple Tasks Simultaneously</h4>
<p>Access applications and interactive facilities from a single terminal without requiring serial execution: switch between
multiple interactive tasks; schedule one-time or periodic background work; display the status of all work in progress or scheduled;
influence the priority scheduling of work, when authorized.</p>
<h4><a name="tag_04_01_13"></a>Complex Data Manipulation</h4>
<p>Manipulate data in files in complex ways: sort, merge, compare, translate, edit, format, pattern match, select subsets (strings,
columns, fields, rows, and so on). These facilities should be available to both conforming applications and interactive users.</p>
<h4><a name="tag_04_01_14"></a>File Hierarchy Manipulation</h4>
<p>Create, delete, move/rename, copy, backup/archive, and display files and directories. These facilities should be available to
both conforming applications and interactive users.</p>
<h4><a name="tag_04_01_15"></a>Locale Configuration</h4>
<p>Customize applications and interactive sessions for the cultural and language conventions of the user. Employ a wide variety of
standard character encodings. These facilities should be available to both conforming applications and interactive users.</p>
<h4><a name="tag_04_01_16"></a>Inter-User Communication</h4>
<p>Send messages or transfer files to other users on the same system or other systems on a network. These facilities should be
available to both conforming applications and interactive users.</p>
<h4><a name="tag_04_01_17"></a>System Environment</h4>
<p>Display information about the status of the system (activities of users and their interactive and background work, file system
utilization, system time, configuration, and presence of optional facilities) and the environment of the user (terminal
characteristics, and so on). Inform the system operator/administrator of problems. Control access to user files and other
resources.</p>
<h4><a name="tag_04_01_18"></a>Printing</h4>
<p>Output files on a variety of output device classes, accessing devices on local or network-connected systems. Control (or
influence) the formatting, priority scheduling, and output distribution of work. These facilities should be available to both
conforming applications and interactive users.</p>
<h4><a name="tag_04_01_19"></a>Software Development</h4>
<p>Develop (create and manage source files, compile/interpret, debug) portable open systems applications and package them for
distribution to, and updating of, other systems.</p>
<h3><a name="tag_04_02"></a>Portability Capabilities</h3>
<p>This section describes the significant portability capabilities of IEEE&nbsp;Std&nbsp;1003.1-2001 and indicates how the user
requirements listed in <a href="#tag_04_01">User Requirements</a> are addressed. The capabilities are listed in the same format as
the preceding user requirements; they are summarized below:</p>
<ul>
<li>
<p>Configuration Interrogation</p>
</li>
<li>
<p>Process Management</p>
</li>
<li>
<p>Access to Data</p>
</li>
<li>
<p>Access to the Environment</p>
</li>
<li>
<p>Access to Determinism and Performance Enhancements</p>
</li>
<li>
<p>Operating System-Dependent Profile</p>
</li>
<li>
<p>I/O Interaction</p>
</li>
<li>
<p>Internationalization Interaction</p>
</li>
<li>
<p>C-Language Extensions</p>
</li>
<li>
<p>Command Language</p>
</li>
<li>
<p>Interactive Facilities</p>
</li>
<li>
<p>Accomplish Multiple Tasks Simultaneously</p>
</li>
<li>
<p>Complex Data Manipulation</p>
</li>
<li>
<p>File Hierarchy Manipulation</p>
</li>
<li>
<p>Locale Configuration</p>
</li>
<li>
<p>Inter-User Communication</p>
</li>
<li>
<p>System Environment</p>
</li>
<li>
<p>Printing</p>
</li>
<li>
<p>Software Development</p>
</li>
</ul>
<h4><a name="tag_04_02_01"></a>Configuration Interrogation</h4>
<p>The <a href="../functions/uname.html"><i>uname</i>()</a> operation provides basic identification of the system. The <a href=
"../functions/sysconf.html"><i>sysconf</i>()</a>, <a href="../functions/pathconf.html"><i>pathconf</i>()</a>, and <a href=
"../functions/fpathconf.html"><i>fpathconf</i>()</a> functions and the <a href="../utilities/getconf.html"><i>getconf</i></a>
utility provide means to interrogate the implementation to determine how to adapt to the environment in which it is running. These
values can be either static (indicating that all instances of the implementation have the same value) or dynamic (indicating that
different instances of the implementation have the different values, or that the value may vary for other reasons, such as
reconfiguration).</p>
<h5><a name="tag_04_02_01_01"></a>Unsatisfied Requirements</h5>
<p>None directly. However, as new areas are added, there will be a need for additional capability in this area.</p>
<h4><a name="tag_04_02_02"></a>Process Management</h4>
<p>The <a href="../functions/fork.html"><i>fork</i>()</a>, <i>exec</i> family, <a href=
"../functions/posix_spawn.html"><i>posix_spawn</i>()</a>, and <a href="../functions/posix_spawnp.html"><i>posix_spawnp</i>()</a>
functions provide for the creation of new processes or the insertion of new applications into existing processes. The <a href=
"../functions/_Exit.html"><i>_Exit</i>()</a>, <a href="../functions/_exit.html"><i>_exit</i>()</a>, <a href=
"../functions/exit.html"><i>exit</i>()</a>, and <a href="../functions/abort.html"><i>abort</i>()</a> functions allow for the
termination of a process by itself. The <a href="../functions/wait.html"><i>wait</i>()</a> and <a href=
"../functions/waitpid.html"><i>waitpid</i>()</a> functions allow one process to deal with the termination of another.</p>
<p>The <a href="../functions/times.html"><i>times</i>()</a> function allows for basic measurement of times used by a process.
Various functions, including <a href="../functions/fstat.html"><i>fstat</i>()</a>, <a href=
"../functions/getegid.html"><i>getegid</i>()</a>, <a href="../functions/geteuid.html"><i>geteuid</i>()</a>, <a href=
"../functions/getgid.html"><i>getgid</i>()</a>, <a href="../functions/getgrgid.html"><i>getgrgid</i>()</a>, <a href=
"../functions/getgrnam.html"><i>getgrnam</i>()</a>, <a href="../functions/getlogin.html"><i>getlogin</i>()</a>, <a href=
"../functions/getpid.html"><i>getpid</i>()</a>, <a href="../functions/getppid.html"><i>getppid</i>()</a>, <a href=
"../functions/getpwnam.html"><i>getpwnam</i>()</a>, <a href="../functions/getpwuid.html"><i>getpwuid</i>()</a>, <a href=
"../functions/getuid.html"><i>getuid</i>()</a>, <a href="../functions/lstat.html"><i>lstat</i>()</a>, and <a href=
"../functions/stat.html"><i>stat</i>()</a>, provide for access to the identifiers of processes and the identifiers and names of
owners of processes (and files).</p>
<p>The various functions operating on environment variables provide for communication of information (primarily user-configurable
defaults) from a parent to child processes.</p>
<p>The operations on the current working directory control and interrogate the directory from which relative filename searches
start. The <a href="../functions/umask.html"><i>umask</i>()</a> function controls the default protections applied to files created
by the process.</p>
<p>The <a href="../functions/alarm.html"><i>alarm</i>()</a>, <a href="../functions/pause.html"><i>pause</i>()</a>, <a href=
"../functions/sleep.html"><i>sleep</i>()</a>, <a href="../functions/ualarm.html"><i>ualarm</i>()</a>, and <a href=
"../functions/usleep.html"><i>usleep</i>()</a> operations allow the process to suspend until a timer has expired or to be notified
when a period of time has elapsed. The <a href="../functions/time.html"><i>time</i>()</a> operation interrogates the current time
and date.</p>
<p>The signal mechanism provides for communication of events either from other processes or from the environment to the
application, and the means for the application to control the effect of these events. The mechanism provides for external
termination of a process and for a process to suspend until an event occurs. The mechanism also provides for a value to be
associated with an event.</p>
<p>Job control provides a means to group processes and control them as groups, and to control their access to the function between
the user and the system (the &quot;controlling terminal&quot;). It also provides the means to suspend and resume processes.</p>
<p>The Process Scheduling option provides control of the scheduling and priority of a process.</p>
<p>The Message Passing option provides a means for interprocess communication involving small amounts of data.</p>
<p>The Memory Management facilities provide control of memory resources and for the sharing of memory. This functionality is
mandatory on XSI-conformant systems.</p>
<p>The Threads facilities provide multiple flows of control with a process (threads), synchronization between threads, association
of data with threads, and controlled cancelation of threads.</p>
<p>The XSI interprocess communications functionality provide an alternate set of facilities to manipulate semaphores, message
queues, and shared memory. These are provided on XSI-conformant systems to support conforming applications developed to run on UNIX
systems.</p>
<h4><a name="tag_04_02_03"></a>Access to Data</h4>
<p>The <a href="../functions/open.html"><i>open</i>()</a>, <a href="../functions/close.html"><i>close</i>()</a>, <a href=
"../functions/fclose.html"><i>fclose</i>()</a>, <a href="../functions/fopen.html"><i>fopen</i>()</a>, and <a href=
"../functions/pipe.html"><i>pipe</i>()</a> functions provide for access to files and data. Such files may be regular files,
interprocess data channels (pipes), or devices. Additional types of objects in the file system are permitted and are being
contemplated for standardization.</p>
<p>The <a href="../functions/access.html"><i>access</i>()</a>, <a href="../functions/chmod.html"><i>chmod</i>()</a>, <a href=
"../functions/chown.html"><i>chown</i>()</a>, <a href="../functions/dup.html"><i>dup</i>()</a>, <a href=
"../functions/dup2.html"><i>dup2</i>()</a>, <a href="../functions/fchmod.html"><i>fchmod</i>()</a>, <a href=
"../functions/fcntl.html"><i>fcntl</i>()</a>, <a href="../functions/fstat.html"><i>fstat</i>()</a>, <a href=
"../functions/ftruncate.html"><i>ftruncate</i>()</a>, <a href="../functions/lstat.html"><i>lstat</i>()</a>, <a href=
"../functions/readlink.html"><i>readlink</i>()</a>, <a href="../functions/realpath.html"><i>realpath</i>()</a>, <a href=
"../functions/stat.html"><i>stat</i>()</a>, and <a href="../functions/utime.html"><i>utime</i>()</a> functions allow for control
and interrogation of file and file-related objects (including symbolic links), and their ownership, protections, and
timestamps.</p>
<p>The <a href="../functions/fgetc.html"><i>fgetc</i>()</a>, <a href="../functions/fputc.html"><i>fputc</i>()</a>, <a href=
"../functions/fread.html"><i>fread</i>()</a>, <a href="../functions/fseek.html"><i>fseek</i>()</a>, <a href=
"../functions/fsetpos.html"><i>fsetpos</i>()</a>, <a href="../functions/fwrite.html"><i>fwrite</i>()</a>, <a href=
"../functions/getc.html"><i>getc</i>()</a>, <a href="../functions/getchar.html"><i>getchar</i>()</a>, <a href=
"../functions/lseek.html"><i>lseek</i>()</a>, <a href="../functions/putchar.html"><i>putchar</i>()</a>, <a href=
"../functions/putc.html"><i>putc</i>()</a>, <a href="../functions/read.html"><i>read</i>()</a>, and <a href=
"../functions/write.html"><i>write</i>()</a> functions provide for data transfer from the application to files (in all their
forms).</p>
<p>The <a href="../functions/closedir.html"><i>closedir</i>()</a>, <a href="../functions/link.html"><i>link</i>()</a>, <a href=
"../functions/mkdir.html"><i>mkdir</i>()</a>, <a href="../functions/opendir.html"><i>opendir</i>()</a>, <a href=
"../functions/readdir.html"><i>readdir</i>()</a>, <a href="../functions/rename.html"><i>rename</i>()</a>, <a href=
"../functions/rmdir.html"><i>rmdir</i>()</a>, <a href="../functions/rewinddir.html"><i>rewinddir</i>()</a>, and <a href=
"../functions/unlink.html"><i>unlink</i>()</a> functions provide for a complete set of operations on directories. Directories can
arbitrarily contain other directories, and a single file can be mentioned in more than one directory.</p>
<p>The file-locking mechanism provides for advisory locking (protection during transactions) of ranges of bytes (in effect,
records) in a file.</p>
<p>The <a href="../functions/confstr.html"><i>confstr</i>()</a>, <a href="../functions/fpathconf.html"><i>fpathconf</i>()</a>, <a
href="../functions/pathconf.html"><i>pathconf</i>()</a>, and <a href="../functions/sysconf.html"><i>sysconf</i>()</a> functions
provide for enquiry as to the behavior of the system where variability is permitted.</p>
<p>The Synchronized Input and Output option provides for assured commitment of data to media.</p>
<p>The Asynchronous Input and Output option provides for initiation and control of asynchronous data transfers.</p>
<h4><a name="tag_04_02_04"></a>Access to the Environment</h4>
<p>The operations and types in the Base Definitions volume of IEEE&nbsp;Std&nbsp;1003.1-2001, <a href=
"../basedefs/xbd_chap11.html#tag_11">Chapter 11, General Terminal Interface</a> are provided for access to asynchronous serial
devices. The primary intended use for these is the controlling terminal for the application (the interaction point between the user
and the system). They are general enough to be used to control any asynchronous serial device. The functions are also general
enough to be used with many other device types as a user interface when some emulation is provided.</p>
<p>Less detailed access is provided for other device types, but in many instances an application need not know whether an object in
the file system is a device or a regular file to operate correctly.</p>
<h5><a name="tag_04_02_04_01"></a>Unsatisfied Requirements</h5>
<p>Detailed control of common device classes, specifically magnetic tape, is not provided.</p>
<h4><a name="tag_04_02_05"></a>Bounded (Realtime) Response</h4>
<p>The Realtime Signals Extension provides queued signals and the prioritization of the handling of signals. The SCHED_FIFO,
SCHED_SPORADIC, and SCHED_RR scheduling policies provide control over processor allocation. The Semaphores option provides
high-performance synchronization. The Memory Management functions provide memory locking for control of memory allocation, file
mapping for high-performance, and shared memory for high-performance interprocess communication. The Message Passing option
provides for interprocess communication without being dependent on shared memory.</p>
<p>The Timers option provides a high resolution function called <a href="../functions/nanosleep.html"><i>nanosleep</i>()</a> with a
finer resolution than the <a href="../functions/sleep.html"><i>sleep</i>()</a> function.</p>
<p>The Typed Memory Objects option, the Monotonic Clock option, and the Timeouts option provide further facilities for applications
to use to obtain predictable bounded response.</p>
<h4><a name="tag_04_02_06"></a>Operating System-Dependent Profile</h4>
<p>IEEE&nbsp;Std&nbsp;1003.1-2001 makes no distinction between text and binary files. The values of EXIT_SUCCESS and EXIT_FAILURE
are further defined.</p>
<h5><a name="tag_04_02_06_01"></a>Unsatisfied Requirements</h5>
<p>None known, but the ISO&nbsp;C standard may contain some additional options that could be specified.</p>
<h4><a name="tag_04_02_07"></a>I/O Interaction</h4>
<p>IEEE&nbsp;Std&nbsp;1003.1-2001 defines how each of the ISO&nbsp;C standard <i>stdio</i> functions interact with the POSIX.1
operations, typically specifying the behavior in terms of POSIX.1 operations.</p>
<h5><a name="tag_04_02_07_01"></a>Unsatisfied Requirements</h5>
<p>None.</p>
<h4><a name="tag_04_02_08"></a>Internationalization Interaction</h4>
<p>The IEEE&nbsp;Std&nbsp;1003.1-2001 environment operations provide a means to define the environment for <a href=
"../functions/setlocale.html"><i>setlocale</i>()</a> and time functions such as <a href=
"../functions/ctime.html"><i>ctime</i>()</a>. The <a href="../functions/tzset.html"><i>tzset</i>()</a> function is provided to set
time conversion information.</p>
<p>The <a href="../functions/nl_langinfo.html"><i>nl_langinfo</i>()</a> function is provided as an XSI extension to query
locale-specific cultural settings.</p>
<h5><a name="tag_04_02_08_01"></a>Unsatisfied Requirements</h5>
<p>None.</p>
<h4><a name="tag_04_02_09"></a>C-Language Extensions</h4>
<p>The <a href="../functions/setjmp.html"><i>setjmp</i>()</a> and <a href="../functions/longjmp.html"><i>longjmp</i>()</a>
functions are not defined to be cognizant of the signal masks defined for POSIX.1. The <a href=
"../functions/sigsetjmp.html"><i>sigsetjmp</i>()</a> and <a href="../functions/siglongjmp.html"><i>siglongjmp</i>()</a> functions
are provided to fill this gap.</p>
<p>The <a href="../functions/_setjmp.html"><i>_setjmp</i>()</a> and <a href="../functions/_longjmp.html"><i>_longjmp</i>()</a>
functions are provided as XSI extensions to support historic practice.</p>
<h5><a name="tag_04_02_09_01"></a>Unsatisfied Requirements</h5>
<p>None.</p>
<h4><a name="tag_04_02_10"></a>Command Language</h4>
<p>The shell command language, as described in the Shell and Utilities volume of IEEE&nbsp;Std&nbsp;1003.1-2001, <a href=
"../utilities/xcu_chap02.html">Chapter 2, Shell Command Language</a>, is a common language useful in batch scripts, through an API
to high-level languages (for the C-Language Binding option, <a href="../functions/system.html"><i>system</i>()</a> and <a href=
"../functions/popen.html"><i>popen</i>()</a>) and through an interactive terminal (see the <a href=
"../utilities/sh.html"><i>sh</i></a> utility). The shell language has many of the characteristics of a high-level language, but it
has been designed to be more suitable for user terminal entry and includes interactive debugging facilities. Through the use of
pipelining, many complex commands can be constructed from combinations of data filters and other common components. Shell scripts
can be created, stored, recalled, and modified by the user with simple editors.</p>
<p>In addition to the basic shell language, the following utilities offer features that simplify and enhance programmatic access to
the utilities and provide features normally found only in high-level languages: <a href=
"../utilities/basename.html"><i>basename</i></a>, <a href="../utilities/bc.html"><i>bc</i></a>, <a href=
"../utilities/command.html"><i>command</i></a>, <a href="../utilities/dirname.html"><i>dirname</i></a>, <a href=
"../utilities/echo.html"><i>echo</i></a>, <a href="../utilities/env.html"><i>env</i></a>, <a href=
"../utilities/expr.html"><i>expr</i></a>, <a href="../utilities/false.html"><i>false</i></a>, <a href=
"../utilities/printf.html"><i>printf</i></a>, <a href="../utilities/read.html"><i>read</i></a>, <a href=
"../utilities/sleep.html"><i>sleep</i></a>, <a href="../utilities/tee.html"><i>tee</i></a>, <a href=
"../utilities/test.html"><i>test</i></a>, CONVERSION ERROR (.Cm) time *,<a href="#tag_foot_1"><sup><small>1</small></sup></a> <a
href="../utilities/true.html"><i>true</i></a>, <a href="../utilities/wait.html"><i>wait</i></a>, <a href=
"../utilities/xargs.html"><i>xargs</i></a>, and all of the special built-in utilities in the Shell and Utilities volume of
IEEE&nbsp;Std&nbsp;1003.1-2001, <a href="../utilities/xcu_chap02.html#tag_02_14">Section 2.14, Special Built-In Utilities</a>.</p>
<h5><a name="tag_04_02_10_01"></a>Unsatisfied Requirements</h5>
<p>None.</p>
<h4><a name="tag_04_02_11"></a>Interactive Facilities</h4>
<p>The utilities offer a common style of command-line interface through conformance to the Utility Syntax Guidelines (see the Base
Definitions volume of IEEE&nbsp;Std&nbsp;1003.1-2001, <a href="../basedefs/xbd_chap12.html#tag_12_02">Section 12.2, Utility Syntax
Guidelines</a>) and the common utility defaults (see the Shell and Utilities volume of IEEE&nbsp;Std&nbsp;1003.1-2001, <a href=
"../utilities/xcu_chap01.html#tag_01_11">Section 1.11, Utility Description Defaults</a>). The <a href=
"../utilities/sh.html"><i>sh</i></a> utility offers an interactive command-line history and editing facility. The following
utilities in the User Portability Utilities option have been customized for interactive use: <a href=
"../utilities/alias.html"><i>alias</i></a>, <a href="../utilities/ex.html"><i>ex</i></a>, <a href=
"../utilities/fc.html"><i>fc</i></a>, <a href="../utilities/mailx.html"><i>mailx</i></a>, <a href=
"../utilities/more.html"><i>more</i></a>, <a href="../utilities/talk.html"><i>talk</i></a>, <a href=
"../utilities/vi.html"><i>vi</i></a>, <a href="../utilities/unalias.html"><i>unalias</i></a>, and <a href=
"../utilities/write.html"><i>write</i></a>; the <a href="../utilities/man.html"><i>man</i></a> utility offers online access to
system documentation.</p>
<h5><a name="tag_04_02_11_01"></a>Unsatisfied Requirements</h5>
<p>The command line interface to individual utilities is as intuitive and consistent as historical practice allows. Work underway
based on graphical user interfaces may be more suitable for novice or occasional users of the system.</p>
<h4><a name="tag_04_02_12"></a>Accomplish Multiple Tasks Simultaneously</h4>
<p>The shell command language offers background processing through the asynchronous list command form; see the Shell and Utilities
volume of IEEE&nbsp;Std&nbsp;1003.1-2001, <a href="../utilities/xcu_chap02.html#tag_02_09">Section 2.9, Shell Commands</a>. The <a
href="../utilities/nohup.html"><i>nohup</i></a> utility makes background processing more robust and usable. The <a href=
"../utilities/kill.html"><i>kill</i></a> utility can terminate background jobs. When the User Portability Utilities option is
supported, the following utilities allow manipulation of jobs: <a href="../utilities/bg.html"><i>bg</i></a>, <a href=
"../utilities/fg.html"><i>fg</i></a>, and <a href="../utilities/jobs.html"><i>jobs</i></a>. Also, if the User Portability Utilities
option is supported, the following can support periodic job scheduling, control, and display: <a href=
"../utilities/at.html"><i>at</i></a>, <a href="../utilities/batch.html"><i>batch</i></a>, <a href=
"../utilities/crontab.html"><i>crontab</i></a>, <a href="../utilities/nice.html"><i>nice</i></a>, <a href=
"../utilities/ps.html"><i>ps</i></a>, and <a href="../utilities/renice.html"><i>renice</i></a>.</p>
<h5><a name="tag_04_02_12_01"></a>Unsatisfied Requirements</h5>
<p>Terminals with multiple windows may be more suitable for some multi-tasking interactive uses than the job control approach in
IEEE&nbsp;Std&nbsp;1003.1-2001. See the comments on graphical user interfaces in <a href="#tag_04_02_11">Interactive Facilities</a>
. The <a href="../utilities/nice.html"><i>nice</i></a> and <a href="../utilities/renice.html"><i>renice</i></a> utilities do not
necessarily take advantage of complex system scheduling algorithms that are supported by the realtime options within
IEEE&nbsp;Std&nbsp;1003.1-2001.</p>
<h4><a name="tag_04_02_13"></a>Complex Data Manipulation</h4>
<p>The following utilities address user requirements in this area: <a href="../utilities/asa.html"><i>asa</i></a>, <a href=
"../utilities/awk.html"><i>awk</i></a>, <a href="../utilities/bc.html"><i>bc</i></a>, <a href=
"../utilities/cmp.html"><i>cmp</i></a>, <a href="../utilities/comm.html"><i>comm</i></a>, <a href=
"../utilities/csplit.html"><i>csplit</i></a>*, <a href="../utilities/cut.html"><i>cut</i></a>, <a href=
"../utilities/dd.html"><i>dd</i></a>, <a href="../utilities/diff.html"><i>diff</i></a>, <a href=
"../utilities/ed.html"><i>ed</i></a>, <a href="../utilities/ex.html"><i>ex</i></a>*, <a href=
"../utilities/expand.html"><i>expand</i></a>*, <a href="../utilities/expr.html"><i>expr</i></a>, <a href=
"../utilities/find.html"><i>find</i></a>, <a href="../utilities/fold.html"><i>fold</i></a>, <a href=
"../utilities/grep.html"><i>grep</i></a>, <a href="../utilities/head.html"><i>head</i></a>, <a href=
"../utilities/join.html"><i>join</i></a>, <a href="../utilities/od.html"><i>od</i></a>, <a href=
"../utilities/paste.html"><i>paste</i></a>, <a href="../utilities/pr.html"><i>pr</i></a>, <a href=
"../utilities/printf.html"><i>printf</i></a>, <a href="../utilities/sed.html"><i>sed</i></a>, <a href=
"../utilities/sort.html"><i>sort</i></a>, <a href="../utilities/split.html"><i>split</i></a>*, <a href=
"../utilities/tabs.html"><i>tabs</i></a>*, <a href="../utilities/tail.html"><i>tail</i></a>, <a href=
"../utilities/tr.html"><i>tr</i></a>, <a href="../utilities/unexpand.html"><i>unexpand</i></a>*, <a href=
"../utilities/uniq.html"><i>uniq</i></a>, <a href="../utilities/uudecode.html"><i>uudecode</i></a>*, <a href=
"../utilities/uuencode.html"><i>uuencode</i></a>*, and <a href="../utilities/wc.html"><i>wc</i></a>.</p>
<h5><a name="tag_04_02_13_01"></a>Unsatisfied Requirements</h5>
<p>Sophisticated text formatting utilities, such as <i>troff</i> or <i>TeX</i>, are not included. Standards work in the area of
SGML may satisfy this.</p>
<h4><a name="tag_04_02_14"></a>File Hierarchy Manipulation</h4>
<p>The following utilities address user requirements in this area: <a href="../utilities/basename.html"><i>basename</i></a>, <a
href="../utilities/cd.html"><i>cd</i></a>, <a href="../utilities/chgrp.html"><i>chgrp</i></a>, <a href=
"../utilities/chmod.html"><i>chmod</i></a>, <a href="../utilities/chown.html"><i>chown</i></a>, <a href=
"../utilities/cksum.html"><i>cksum</i></a>, <a href="../utilities/cp.html"><i>cp</i></a>, <a href=
"../utilities/dd.html"><i>dd</i></a>, <a href="../utilities/df.html"><i>df</i></a>*, <a href=
"../utilities/diff.html"><i>diff</i></a>, <a href="../utilities/dirname.html"><i>dirname</i></a>, <a href=
"../utilities/du.html"><i>du</i></a>*, <a href="../utilities/find.html"><i>find</i></a>, <a href=
"../utilities/ls.html"><i>ls</i></a>, <a href="../utilities/ln.html"><i>ln</i></a>, <a href=
"../utilities/mkdir.html"><i>mkdir</i></a>, <a href="../utilities/mkfifo.html"><i>mkfifo</i></a>, <a href=
"../utilities/mv.html"><i>mv</i></a>, <a href="../utilities/patch.html"><i>patch</i></a>*, <a href=
"../utilities/pathchk.html"><i>pathchk</i></a>, <a href="../utilities/pax.html"><i>pax</i></a>, <a href=
"../utilities/pwd.html"><i>pwd</i></a>, <a href="../utilities/rm.html"><i>rm</i></a>, <a href=
"../utilities/rmdir.html"><i>rmdir</i></a>, <a href="../utilities/test.html"><i>test</i></a>, and <a href=
"../utilities/touch.html"><i>touch</i></a>.</p>
<h5><a name="tag_04_02_14_01"></a>Unsatisfied Requirements</h5>
<p>Some graphical user interfaces offer more intuitive file manager components that allow file manipulation through the use of
icons for novice users.</p>
<h4><a name="tag_04_02_15"></a>Locale Configuration</h4>
<p>The standard utilities are affected by the various <i>LC_</i> variables to achieve locale-dependent operation: character
classification, collation sequences, regular expressions and shell pattern matching, date and time formats, numeric formatting, and
monetary formatting. When the POSIX2_LOCALEDEF option is supported, applications can provide their own locale definition files. The
following utilities address user requirements in this area: <a href="../utilities/date.html"><i>date</i></a>, <a href=
"../utilities/ed.html"><i>ed</i></a>, <a href="../utilities/ex.html"><i>ex</i></a>*, <a href=
"../utilities/find.html"><i>find</i></a>, <a href="../utilities/grep.html"><i>grep</i></a>, <a href=
"../utilities/locale.html"><i>locale</i></a>, <a href="../utilities/localedef.html"><i>localedef</i></a>, <a href=
"../utilities/more.html"><i>more</i></a>*, <a href="../utilities/sed.html"><i>sed</i></a>, <a href=
"../utilities/sh.html"><i>sh</i></a>, <a href="../utilities/sort.html"><i>sort</i></a>, <a href=
"../utilities/tr.html"><i>tr</i></a>, <a href="../utilities/uniq.html"><i>uniq</i></a>, and <a href=
"../utilities/vi.html"><i>vi</i></a>*.</p>
<p>The <a href="../functions/iconv.html"><i>iconv</i>()</a>, <a href="../functions/iconv_close.html"><i>iconv_close</i>()</a>, and
<a href="../functions/iconv_open.html"><i>iconv_open</i>()</a> functions are available to allow an application to convert character
data between supported character sets.</p>
<p>The <a href="../utilities/gencat.html"><i>gencat</i></a> utility and the <a href=
"../functions/catopen.html"><i>catopen</i>()</a>, <a href="../functions/catclose.html"><i>catclose</i>()</a>, and <a href=
"../functions/catgets.html"><i>catgets</i>()</a> functions for message catalog manipulation are available on XSI-conformant
systems.</p>
<h5><a name="tag_04_02_15_01"></a>Unsatisfied Requirements</h5>
<p>Some aspects of multi-byte character and state-encoded character encodings have not yet been addressed. The C-language
functions, such as <a href="../functions/getopt.html"><i>getopt</i>()</a>, are generally limited to single-byte characters. The
effect of the <i>LC_MESSAGES</i> variable on message formats is only suggested at this time.</p>
<h4><a name="tag_04_02_16"></a>Inter-User Communication</h4>
<p>The following utilities address user requirements in this area: <a href="../utilities/cksum.html"><i>cksum</i></a>, <a href=
"../utilities/mailx.html"><i>mailx</i></a>*, <a href="../utilities/mesg.html"><i>mesg</i></a>*, <a href=
"../utilities/patch.html"><i>patch</i></a>*, <a href="../utilities/pax.html"><i>pax</i></a>, <a href=
"../utilities/talk.html"><i>talk</i></a>*, <a href="../utilities/uudecode.html"><i>uudecode</i></a>*, <a href=
"../utilities/uuencode.html"><i>uuencode</i></a>*, <a href="../utilities/who.html"><i>who</i></a>*, and <a href=
"../utilities/write.html"><i>write</i></a>*.</p>
<p>The historical UUCP utilities are included on XSI-conformant systems.</p>
<h5><a name="tag_04_02_16_01"></a>Unsatisfied Requirements</h5>
<p>None.</p>
<h4><a name="tag_04_02_17"></a>System Environment</h4>
<p>The following utilities address user requirements in this area: <a href="../utilities/chgrp.html"><i>chgrp</i></a>, <a href=
"../utilities/chmod.html"><i>chmod</i></a>, <a href="../utilities/chown.html"><i>chown</i></a>, <a href=
"../utilities/df.html"><i>df</i></a>*, <a href="../utilities/du.html"><i>du</i></a>*, <a href=
"../utilities/env.html"><i>env</i></a>, <a href="../utilities/getconf.html"><i>getconf</i></a>, <a href=
"../utilities/id.html"><i>id</i></a>, <a href="../utilities/logger.html"><i>logger</i></a>, <a href=
"../utilities/logname.html"><i>logname</i></a>, <a href="../utilities/mesg.html"><i>mesg</i></a>*, <a href=
"../utilities/newgrp.html"><i>newgrp</i></a>*, <a href="../utilities/ps.html"><i>ps</i></a>*, <a href=
"../utilities/stty.html"><i>stty</i></a>, <a href="../utilities/tput.html"><i>tput</i></a>*, <a href=
"../utilities/tty.html"><i>tty</i></a>, <a href="../utilities/umask.html"><i>umask</i></a>, <a href=
"../utilities/uname.html"><i>uname</i></a>, and <a href="../utilities/who.html"><i>who</i></a>*.</p>
<p>The <a href="../functions/closelog.html"><i>closelog</i>()</a>, <a href="../functions/openlog.html"><i>openlog</i>()</a>, <a
href="../functions/setlogmask.html"><i>setlogmask</i>()</a>, and <a href="../functions/syslog.html"><i>syslog</i>()</a> functions
provide System Logging facilities on XSI-conformant systems; these are analogous to the <a href=
"../utilities/logger.html"><i>logger</i></a> utility.</p>
<h5><a name="tag_04_02_17_01"></a>Unsatisfied Requirements</h5>
<p>None.</p>
<h4><a name="tag_04_02_18"></a>Printing</h4>
<p>The following utilities address user requirements in this area: <a href="../utilities/pr.html"><i>pr</i></a> and <a href=
"../utilities/lp.html"><i>lp</i></a>.</p>
<h5><a name="tag_04_02_18_01"></a>Unsatisfied Requirements</h5>
<p>There are no features to control the formatting or scheduling of the print jobs.</p>
<h4><a name="tag_04_02_19"></a>Software Development</h4>
<p>The following utilities address user requirements in this area: <a href="../utilities/ar.html"><i>ar</i></a>, <a href=
"../utilities/asa.html"><i>asa</i></a>, <a href="../utilities/awk.html"><i>awk</i></a>, <a href=
"../utilities/c99.html"><i>c99</i></a>, <a href="../utilities/ctags.html"><i>ctags</i></a>*, <a href=
"../utilities/fort77.html"><i>fort77</i></a>, <a href="../utilities/getconf.html"><i>getconf</i></a>, <a href=
"../utilities/getopts.html"><i>getopts</i></a>, <a href="../utilities/lex.html"><i>lex</i></a>, <a href=
"../utilities/localedef.html"><i>localedef</i></a>, <a href="../utilities/make.html"><i>make</i></a>, <a href=
"../utilities/nm.html"><i>nm</i></a>*, <a href="../utilities/od.html"><i>od</i></a>, <a href=
"../utilities/patch.html"><i>patch</i></a>*, <a href="../utilities/pax.html"><i>pax</i></a>, <a href=
"../utilities/strings.html"><i>strings</i></a>*, <a href="../utilities/strip.html"><i>strip</i></a>, <a href=
"../utilities/time.html"><i>time</i></a>*, and <a href="../utilities/yacc.html"><i>yacc</i></a>.</p>
<p>The <a href="../functions/system.html"><i>system</i>()</a>, <a href="../functions/popen.html"><i>popen</i>()</a>, <a href=
"../functions/pclose.html"><i>pclose</i>()</a>, <a href="../functions/regcomp.html"><i>regcomp</i>()</a>, <a href=
"../functions/regexec.html"><i>regexec</i>()</a>, <a href="../functions/regerror.html"><i>regerror</i>()</a>, <a href=
"../functions/regfree.html"><i>regfree</i>()</a>, <a href="../functions/fnmatch.html"><i>fnmatch</i>()</a>, <a href=
"../functions/getopt.html"><i>getopt</i>()</a>, <a href="../functions/glob.html"><i>glob</i>()</a>, <a href=
"../functions/globfree.html"><i>globfree</i>()</a>, <a href="../functions/wordexp.html"><i>wordexp</i>()</a>, and <a href=
"../functions/wordfree.html"><i>wordfree</i>()</a> functions allow C-language programmers to access some of the interfaces used by
the utilities, such as argument processing, regular expressions, and pattern matching.</p>
<p>The SCCS source-code control system utilities are available on systems supporting the XSI Development option.</p>
<h5><a name="tag_04_02_19_01"></a>Unsatisfied Requirements</h5>
<p>There are no language-specific development tools related to languages other than C and FORTRAN. The C tools are more complete
and varied than the FORTRAN tools. There is no data dictionary or other CASE-like development tools.</p>
<h4><a name="tag_04_02_20"></a>Future Growth</h4>
<p>It is arguable whether or not all functionality to support applications is potentially within the scope of
IEEE&nbsp;Std&nbsp;1003.1-2001. As a simple matter of practicality, it cannot be. Areas such as graphics, application
domain-specific functionality, windowing, and so on, should be in unique standards. As such, they are properly &quot;Unsatisfied
Requirements&quot; in terms of providing fully conforming applications, but ones which are outside the scope of
IEEE&nbsp;Std&nbsp;1003.1-2001.</p>
<p>However, as the standards evolve, certain functionality once considered &quot;exotic&quot; enough to be part of a separate standard
become common enough to be included in a core standard such as this. Realtime and networking, for example, have both moved from
separate standards (with much difficult cross-referencing) into IEEE&nbsp;Std&nbsp;1003.1 over time, and although no specific areas
have been identified for inclusion in future revisions, such inclusions seem likely.</p>
<h3><a name="tag_04_03"></a>Profiling Considerations</h3>
<p>This section offers guidance to writers of profiles on how the configurable options, limits, and optional behavior of
IEEE&nbsp;Std&nbsp;1003.1-2001 should be cited in profiles. Profile writers should consult the general guidance in POSIX.0 when
writing POSIX Standardized Profiles.</p>
<p>The information in this section is an inclusive list of features that should be considered by profile writers. Subsetting of
IEEE&nbsp;Std&nbsp;1003.1-2001 should follow the Base Definitions volume of IEEE&nbsp;Std&nbsp;1003.1-2001, <a href=
"../basedefs/xbd_chap02.html#tag_02_01_05_01">Section 2.1.5.1, Subprofiling Considerations</a>. A set of profiling options is
described in <a href="subprofiles.html#tag_05"><i>Subprofiling Considerations (Informative)</i></a> .</p>
<h4><a name="tag_04_03_01"></a>Configuration Options</h4>
<p>There are two set of options suggested by IEEE&nbsp;Std&nbsp;1003.1-2001: those for POSIX-conforming systems and those for
X/Open System Interface (XSI) conformance. The requirements for XSI conformance are documented in the Base Definitions volume of
IEEE&nbsp;Std&nbsp;1003.1-2001 and not discussed further here, as they superset the POSIX conformance requirements.</p>
<h4><a name="tag_04_03_02"></a>Configuration Options (Shell and Utilities)</h4>
<p>There are three broad optional configurations for the Shell and Utilities volume of IEEE&nbsp;Std&nbsp;1003.1-2001: basic
execution system, development system, and user portability interactive system. The options to support these, and other minor
configuration options, are listed in the Base Definitions volume of IEEE&nbsp;Std&nbsp;1003.1-2001, <a href=
"../basedefs/xbd_chap02.html#tag_02">Chapter 2, Conformance</a>. Profile writers should consult the following list and the comments
concerning user requirements addressed by various components in <a href="#tag_04_02">Portability Capabilities</a> .</p>
<dl compact>
<dt>POSIX2_UPE</dt>
<dd><br>
The system supports the User Portability Utilities option.
<p>This option is a requirement for a user portability interactive system. It is required frequently except for those systems, such
as embedded realtime or dedicated application systems, that support little or no interactive time-sharing work by users or
operators. XSI-conformant systems support this option.</p>
</dd>
<dt>POSIX2_SW_DEV</dt>
<dd><br>
The system supports the Software Development Utilities option.
<p>This option is required by many systems, even those in which actual software development does not occur. The <a href=
"../utilities/make.html"><i>make</i></a> utility, in particular, is required by many application software packages as they are
installed onto the system. If POSIX2_C_DEV is supported, POSIX2_SW_DEV is almost a mandatory requirement because of <a href=
"../utilities/ar.html"><i>ar</i></a> and <a href="../utilities/make.html"><i>make</i></a>.</p>
</dd>
<dt>POSIX2_C_BIND</dt>
<dd><br>
The system supports the C-Language Bindings option.
<p>This option is required on some implementations developing complex C applications or on any system installing C applications in
source form that require the functions in this option. The <a href="../functions/system.html"><i>system</i>()</a> and <a href=
"../functions/popen.html"><i>popen</i>()</a> functions, in particular, are widely used by applications; the others are rather more
specialized.</p>
</dd>
<dt>POSIX2_C_DEV</dt>
<dd><br>
The system supports the C-Language Development Utilities option.
<p>This option is required by many systems, even those in which actual C-language software development does not occur. The <a href=
"../utilities/c99.html"><i>c99</i></a> utility, in particular, is required by many application software packages as they are
installed onto the system. The <a href="../utilities/lex.html"><i>lex</i></a> and <a href="../utilities/yacc.html"><i>yacc</i></a>
utilities are used less frequently.</p>
</dd>
<dt>POSIX2_FORT_DEV</dt>
<dd><br>
The system supports the FORTRAN Development Utilities option
<p>As with C, this option is needed on any system developing or installing FORTRAN applications in source form.</p>
</dd>
<dt>POSIX2_FORT_RUN</dt>
<dd><br>
The system supports the FORTRAN Runtime Utilities option.
<p>This option is required for some FORTRAN applications that need the <a href="../utilities/asa.html"><i>asa</i></a> utility to
convert Hollerith printing statement output. It is unknown how frequently this occurs.</p>
</dd>
<dt>POSIX2_LOCALEDEF</dt>
<dd><br>
The system supports the creation of locales.
<p>This option is needed if applications require their own customized locale definitions to operate. It is presently unknown
whether many applications are dependent on this. However, the option is virtually mandatory for systems in which internationalized
applications are developed.</p>
<p>XSI-conformant systems support this option.</p>
</dd>
<dt>POSIX2_PBS</dt>
<dd><br>
The system supports the Batch Environment option.</dd>
<dt>POSIX2_PBS_ACCOUNTING</dt>
<dd><br>
The system supports the optional feature of accounting within the Batch Environment option. It will be required in servers that
implement the optional feature of accounting.</dd>
<dt>POSIX2_PBS_CHECKPOINT</dt>
<dd><br>
The system supports the optional feature of checkpoint/restart within the Batch Environment option.</dd>
<dt>POSIX2_PBS_LOCATE</dt>
<dd><br>
The system supports the optional feature of locating batch jobs within the Batch Environment option.</dd>
<dt>POSIX2_PBS_MESSAGE</dt>
<dd><br>
The system supports the optional feature of sending messages to batch jobs within the Batch Environment option.</dd>
<dt>POSIX2_PBS_TRACK</dt>
<dd><br>
The system supports the optional feature of tracking batch jobs within the Batch Environment option.</dd>
<dt>POSIX2_CHAR_TERM</dt>
<dd><br>
The system supports at least one terminal type capable of all operations described in IEEE&nbsp;Std&nbsp;1003.1-2001.
<p>On systems with POSIX2_UPE, this option is almost always required. It was developed solely to allow certain specialized vendors
and user applications to bypass the requirement for general-purpose asynchronous terminal support. For example, an application and
system that was suitable for block-mode terminals, such as IBM 3270s, would not need this option.</p>
<p>XSI-conformant systems support this option.</p>
</dd>
</dl>
<h4><a name="tag_04_03_03"></a>Configurable Limits</h4>
<p>Very few of the limits need to be increased for profiles. No profile can cite lower values.</p>
<dl compact>
<dt>{POSIX2_BC_BASE_MAX}</dt>
<dt>{POSIX2_BC_DIM_MAX}</dt>
<dt>{POSIX2_BC_SCALE_MAX}</dt>
<dt>{POSIX2_BC_STRING_MAX}</dt>
<dd><br>
No increase is anticipated for any of these <a href="../utilities/bc.html"><i>bc</i></a> values, except for very specialized
applications involving huge numbers.</dd>
<dt>{POSIX2_COLL_WEIGHTS_MAX}</dt>
<dd><br>
Some natural languages with complex collation requirements require an increase from the default 2 to 4; no higher numbers are
anticipated.</dd>
<dt>{POSIX2_EXPR_NEST_MAX}</dt>
<dd><br>
No increase is anticipated.</dd>
<dt>{POSIX2_LINE_MAX}</dt>
<dd><br>
This number is much larger than most historical applications have been able to use. At some future time, applications may be
rewritten to take advantage of even larger values.</dd>
<dt>{POSIX2_RE_DUP_MAX}</dt>
<dd><br>
No increase is anticipated.</dd>
<dt>{POSIX2_VERSION}</dt>
<dd><br>
This is actually not a limit, but a standard version stamp. Generally, a profile should specify the Shell and Utilities volume of
IEEE&nbsp;Std&nbsp;1003.1-2001, <a href="../utilities/xcu_chap02.html">Chapter 2, Shell Command Language</a> by name in the
normative references section, not this value.</dd>
</dl>
<h4><a name="tag_04_03_04"></a>Configuration Options (System Interfaces)</h4>
<dl compact>
<dt>{NGROUPS_MAX}</dt>
<dd><br>
A non-zero value indicates that the implementation supports supplementary groups.
<p>This option is needed where there is a large amount of shared use of files, but where a certain amount of protection is needed.
Many profiles<a href="#tag_foot_2"><sup><small>2</small></sup></a> are known to require this option; it should only be required if
needed, but it should never be prohibited.</p>
</dd>
<dt>_POSIX_ADVISORY_INFO</dt>
<dd><br>
The system provides advisory information for file management.
<p>This option allows the application to specify advisory information that can be used to achieve better or even deterministic
response time in file manager or input and output operations.</p>
</dd>
<dt>_POSIX_ASYNCHRONOUS_IO</dt>
<dd><br>
The system provides concurrent process execution and input and output transfers.
<p>This option was created to support historical systems that did not provide the feature. It should only be required if needed,
but it should never be prohibited.</p>
</dd>
<dt>_POSIX_BARRIERS</dt>
<dd><br>
The system supports barrier synchronization.
<p>This option was created to allow efficient synchronization of multiple parallel threads in multi-processor systems in which the
operation is supported in part by the hardware architecture.</p>
</dd>
<dt>_POSIX_CHOWN_RESTRICTED</dt>
<dd><br>
The system restricts the right to &quot;give away&quot; files to other users.
<p>This option should be carefully investigated before it is required. Some applications expect that they can change the ownership
of files in this way. It is provided where either security or system account requirements cause this ability to be a problem. It is
also known to be specified in many profiles.</p>
</dd>
<dt>_POSIX_CLOCK_SELECTION</dt>
<dd><br>
The system supports the Clock Selection option.
<p>This option allows applications to request a high resolution sleep in order to suspend a thread during a relative time interval,
or until an absolute time value, using the desired clock. It also allows the application to select the clock used in a <a href=
"../functions/pthread_cond_timedwait.html"><i>pthread_cond_timedwait</i>()</a> function call.</p>
</dd>
<dt>_POSIX_CPUTIME</dt>
<dd><br>
The system supports the Process CPU-Time Clocks option.
<p>This option allows applications to use a new clock that measures the execution times of processes or threads, and the
possibility to create timers based upon these clocks, for runtime detection (and treatment) of execution time overruns.</p>
</dd>
<dt>_POSIX_FSYNC</dt>
<dd><br>
The system supports file synchronization requests.
<p>This option was created to support historical systems that did not provide the feature. Applications that are expecting
guaranteed completion of their input and output operations should require the _POSIX_SYNC_IO option. This option should never be
prohibited.</p>
<p>XSI-conformant systems support this option.</p>
</dd>
<dt>_POSIX_IPV6</dt>
<dd><br>
The system supports facilities related to Internet Protocol Version 6 (IPv6).
<p>This option was created to allow systems to transition to IPv6.</p>
</dd>
<dt>_POSIX_JOB_CONTROL</dt>
<dd><br>
Job control facilities are mandatory in IEEE&nbsp;Std&nbsp;1003.1-2001.
<p>The option was created primarily to support historical systems that did not provide the feature. Many existing profiles now
require it; it should only be required if needed, but it should never be prohibited. Most applications that use it can run when it
is not present, although with a degraded level of user convenience.</p>
</dd>
<dt>_POSIX_MAPPED_FILES</dt>
<dd><br>
The system supports the mapping of regular files into the process address space.
<p>XSI-conformant systems support this option.</p>
<p>Both this option and the Shared Memory Objects option provide shared access to memory objects in the process address space. The
functions defined under this option provide the functionality of existing practice for mapping regular files. This functionality
was deemed unnecessary, if not inappropriate, for embedded systems applications and, hence, is provided under this option. It
should only be required if needed, but it should never be prohibited.</p>
</dd>
<dt>_POSIX_MEMLOCK</dt>
<dd><br>
The system supports the locking of the address space.
<p>This option was created to support historical systems that did not provide the feature. It should only be required if needed,
but it should never be prohibited.</p>
</dd>
<dt>_POSIX_MEMLOCK_RANGE</dt>
<dd><br>
The system supports the locking of specific ranges of the address space.
<p>For applications that have well-defined sections that need to be locked and others that do not, IEEE&nbsp;Std&nbsp;1003.1-2001
supports an optional set of functions to lock or unlock a range of process addresses. The following are two reasons for having a
means to lock down a specific range:</p>
<ol>
<li>
<p>An asynchronous event handler function that must respond to external events in a deterministic manner such that page faults
cannot be tolerated</p>
</li>
<li>
<p>An input/output &quot;buffer&quot; area that is the target for direct-to-process I/O, and the overhead of implicit locking and unlocking
for each I/O call cannot be tolerated</p>
</li>
</ol>
<p>It should only be required if needed, but it should never be prohibited.</p>
</dd>
<dt>_POSIX_MEMORY_PROTECTION</dt>
<dd><br>
The system supports memory protection.
<p>XSI-conformant systems support this option.</p>
<p>The provision of this option typically imposes additional hardware requirements. It should never be prohibited.</p>
</dd>
<dt>_POSIX_PRIORITIZED_IO</dt>
<dd><br>
The system provides prioritization for input and output operations.
<p>The use of this option may interfere with the ability of the system to optimize input and output throughput. It should only be
required if needed, but it should never be prohibited.</p>
</dd>
<dt>_POSIX_MESSAGE_PASSING</dt>
<dd><br>
The system supports the passing of messages between processes.
<p>This option was created to support historical systems that did not provide the feature. The functionality adds a
high-performance XSI interprocess communication facility for local communication. It should only be required if needed, but it
should never be prohibited.</p>
</dd>
<dt>_POSIX_MONOTONIC_CLOCK</dt>
<dd><br>
The system supports the Monotonic Clock option.
<p>This option allows realtime applications to rely on a monotonically increasing clock that does not jump backwards, and whose
value does not change except for the regular ticking of the clock.</p>
</dd>
<dt>_POSIX_PRIORITY_SCHEDULING</dt>
<dd><br>
The system provides priority-based process scheduling.
<p>Support of this option provides predictable scheduling behavior, allowing applications to determine the order in which processes
that are ready to run are granted access to a processor. It should only be required if needed, but it should never be
prohibited.</p>
</dd>
<dt>_POSIX_REALTIME_SIGNALS</dt>
<dd><br>
The system provides prioritized, queued signals with associated data values.
<p>This option was created to support historical systems that did not provide the features. It should only be required if needed,
but it should never be prohibited.</p>
</dd>
<dt>_POSIX_REGEXP</dt>
<dd><br>
Support for regular expression facilities is mandatory in IEEE&nbsp;Std&nbsp;1003.1-2001.</dd>
<dt>_POSIX_SAVED_IDS</dt>
<dd><br>
Support for this feature is mandatory in IEEE&nbsp;Std&nbsp;1003.1-2001.
<p>Certain classes of applications rely on it for proper operation, and there is no alternative short of giving the application
root privileges on most implementations that did not provide _POSIX_SAVED_IDS.</p>
</dd>
<dt>_POSIX_SEMAPHORES</dt>
<dd><br>
The system provides counting semaphores.
<p>This option was created to support historical systems that did not provide the feature. It should only be required if needed,
but it should never be prohibited.</p>
</dd>
<dt>_POSIX_SHARED_MEMORY_OBJECTS</dt>
<dd><br>
The system supports the mapping of shared memory objects into the process address space.
<p>Both this option and the Memory Mapped Files option provide shared access to memory objects in the process address space. The
functions defined under this option provide the functionality of existing practice for shared memory objects. This functionality
was deemed appropriate for embedded systems applications and, hence, is provided under this option. It should only be required if
needed, but it should never be prohibited.</p>
</dd>
<dt>_POSIX_SHELL</dt>
<dd><br>
Support for the <a href="../utilities/sh.html"><i>sh</i></a> utility command line interpreter is mandatory in
IEEE&nbsp;Std&nbsp;1003.1-2001.</dd>
<dt>_POSIX_SPAWN</dt>
<dd><br>
The system supports the spawn option.
<p>This option provides applications with an efficient mechanism to spawn execution of a new process.</p>
</dd>
<dt>_POSIX_SPINLOCKS</dt>
<dd><br>
The system supports spin locks.
<p>This option was created to support a simple and efficient synchronization mechanism for threads executing in multi-processor
systems.</p>
</dd>
<dt>_POSIX_SPORADIC_SERVER</dt>
<dd><br>
The system supports the sporadic server scheduling policy.
<p>This option provides applications with a new scheduling policy for scheduling aperiodic processes or threads in hard realtime
applications.</p>
</dd>
<dt>_POSIX_SYNCHRONIZED_IO</dt>
<dd><br>
The system supports guaranteed file synchronization.
<p>This option was created to support historical systems that did not provide the feature. Applications that are expecting
guaranteed completion of their input and output operations should require this option, rather than the File Synchronization option.
It should only be required if needed, but it should never be prohibited.</p>
</dd>
<dt>_POSIX_THREADS</dt>
<dd><br>
The system supports multiple threads of control within a single process.
<p>This option was created to support historical systems that did not provide the feature. Applications written assuming a
multi-threaded environment would be expected to require this option. It should only be required if needed, but it should never be
prohibited.</p>
<p>XSI-conformant systems support this option.</p>
</dd>
<dt>_POSIX_THREAD_ATTR_STACKADDR</dt>
<dd><br>
The system supports specification of the stack address for a created thread.
<p>Applications may take advantage of support of this option for performance benefits, but dependence on this feature should be
minimized. This option should never be prohibited.</p>
<p>XSI-conformant systems support this option.</p>
</dd>
<dt>_POSIX_THREAD_ATTR_STACKSIZE</dt>
<dd><br>
The system supports specification of the stack size for a created thread.
<p>Applications may require this option in order to ensure proper execution, but such usage limits portability and dependence on
this feature should be minimized. It should only be required if needed, but it should never be prohibited.</p>
<p>XSI-conformant systems support this option.</p>
</dd>
<dt>_POSIX_THREAD_PRIORITY_SCHEDULING</dt>
<dd><br>
The system provides priority-based thread scheduling.
<p>Support of this option provides predictable scheduling behavior, allowing applications to determine the order in which threads
that are ready to run are granted access to a processor. It should only be required if needed, but it should never be
prohibited.</p>
</dd>
<dt>_POSIX_THREAD_PRIO_INHERIT</dt>
<dd><br>
The system provides mutual-exclusion operations with priority inheritance.
<p>Support of this option provides predictable scheduling behavior, allowing applications to determine the order in which threads
that are ready to run are granted access to a processor. It should only be required if needed, but it should never be
prohibited.</p>
</dd>
<dt>_POSIX_THREAD_PRIO_PROTECT</dt>
<dd><br>
The system supports a priority ceiling emulation protocol for mutual-exclusion operations.
<p>Support of this option provides predictable scheduling behavior, allowing applications to determine the order in which threads
that are ready to run are granted access to a processor. It should only be required if needed, but it should never be
prohibited.</p>
</dd>
<dt>_POSIX_THREAD_PROCESS_SHARED</dt>
<dd><br>
The system provides shared access among multiple processes to synchronization objects.
<p>This option was created to support historical systems that did not provide the feature. It should only be required if needed,
but it should never be prohibited.</p>
<p>XSI-conformant systems support this option.</p>
</dd>
<dt>_POSIX_THREAD_SAFE_FUNCTIONS</dt>
<dd><br>
The system provides thread-safe versions of all of the POSIX.1 functions.
<p>This option is required if the Threads option is supported. This is a separate option because thread-safe functions are useful
in implementations providing other mechanisms for concurrency. It should only be required if needed, but it should never be
prohibited.</p>
<p>XSI-conformant systems support this option.</p>
</dd>
<dt>_POSIX_THREAD_SPORADIC_SERVER</dt>
<dd><br>
The system supports the thread sporadic server scheduling policy.
<p>Support for this option provides applications with a new scheduling policy for scheduling aperiodic threads in hard realtime
applications.</p>
</dd>
<dt>_POSIX_TIMEOUTS</dt>
<dd><br>
The system provides timeouts for some blocking services.
<p>This option was created to provide a timeout capability to system services, thus allowing applications to include better error
detection, and recovery capabilities.</p>
</dd>
<dt>_POSIX_TIMERS</dt>
<dd><br>
The system provides higher resolution clocks with multiple timers per process.
<p>This option was created to support historical systems that did not provide the features. This option is appropriate for
applications requiring higher resolution timestamps or needing to control the timing of multiple activities. It should only be
required if needed, but it should never be prohibited.</p>
</dd>
<dt>_POSIX_TRACE</dt>
<dd><br>
The system supports the Trace option.
<p>This option was created to allow applications to perform tracing.</p>
</dd>
<dt>_POSIX_TRACE_EVENT_FILTER</dt>
<dd><br>
The system supports the Trace Event Filter option.
<p>This option is dependent on support of the Trace option.</p>
</dd>
<dt>_POSIX_TRACE_INHERIT</dt>
<dd><br>
The system supports the Trace Inherit option.
<p>This option is dependent on support of the Trace option.</p>
</dd>
<dt>_POSIX_TRACE_LOG</dt>
<dd><br>
The system supports the Trace Log option.
<p>This option is dependent on support of the Trace option.</p>
</dd>
<dt>_POSIX_TYPED_MEMORY_OBJECTS</dt>
<dd><br>
The system supports the Typed Memory Objects option.
<p>This option was created to allow realtime applications to access different kinds of physical memory, and allow processes in
these applications to share portions of this memory.</p>
</dd>
</dl>
<h4><a name="tag_04_03_05"></a>Configurable Limits</h4>
<p>In general, the configurable limits in the <a href="../basedefs/limits.h.html"><i>&lt;limits.h&gt;</i></a> header defined in the
Base Definitions volume of IEEE&nbsp;Std&nbsp;1003.1-2001 have been set to minimal values; many applications or implementations may
require larger values. No profile can cite lower values.</p>
<dl compact>
<dt>{AIO_LISTIO_MAX}</dt>
<dd><br>
The current minimum is likely to be inadequate for most applications. It is expected that this value will be increased by profiles
requiring support for list input and output operations.</dd>
<dt>{AIO_MAX}</dt>
<dd><br>
The current minimum is likely to be inadequate for most applications. It is expected that this value will be increased by profiles
requiring support for asynchronous input and output operations.</dd>
<dt>{AIO_PRIO_DELTA_MAX}</dt>
<dd><br>
The functionality associated with this limit is needed only by sophisticated applications. It is not expected that this limit would
need to be increased under a general-purpose profile.</dd>
<dt>{ARG_MAX}</dt>
<dd><br>
The current minimum is likely to need to be increased for profiles, particularly as larger amounts of information are passed
through the environment. Many implementations are believed to support larger values.</dd>
<dt>{CHILD_MAX}</dt>
<dd><br>
The current minimum is suitable only for systems where a single user is not running applications in parallel. It is significantly
too low for any system also requiring windows, and if _POSIX_JOB_CONTROL is specified, it should be raised.</dd>
<dt>{CLOCKRES_MIN}</dt>
<dd><br>
It is expected that profiles will require a finer granularity clock, perhaps as fine as 1 &micro;s, represented by a value of 1000
for this limit.</dd>
<dt>{DELAYTIMER_MAX}</dt>
<dd><br>
It is believed that most implementations will provide larger values.</dd>
<dt>{LINK_MAX}</dt>
<dd><br>
For most applications and usage, the current minimum is adequate. Many implementations have a much larger value, but this should
not be used as a basis for raising the value unless the applications to be used require it.</dd>
<dt>{LOGIN_NAME_MAX}</dt>
<dd><br>
This is not actually a limit, but an implementation parameter. No profile should impose a requirement on this value.</dd>
<dt>{MAX_CANON}</dt>
<dd><br>
For most purposes, the current minimum is adequate. Unless high-speed burst serial devices are used, it should be left as is.</dd>
<dt>{MAX_INPUT}</dt>
<dd><br>
See {MAX_CANON}.</dd>
<dt>{MQ_OPEN_MAX}</dt>
<dd><br>
The current minimum should be adequate for most profiles.</dd>
<dt>{MQ_PRIO_MAX}</dt>
<dd><br>
The current minimum corresponds to the required number of process scheduling priorities. Many realtime practitioners believe that
the number of message priority levels ought to be the same as the number of execution scheduling priorities.</dd>
<dt>{NAME_MAX}</dt>
<dd><br>
Many implementations now support larger values, and many applications and users assume that larger names can be used. Many existing
profiles also specify a larger value. Specifying this value will reduce the number of conforming implementations, although this
might not be a significant consideration over time. Values greater than 255 should not be required.</dd>
<dt>{NGROUPS_MAX}</dt>
<dd><br>
The value selected will typically be 8 or larger.</dd>
<dt>{OPEN_MAX}</dt>
<dd><br>
The historically common value for this has been 20. Many implementations support larger values. If applications that use larger
values are anticipated, an appropriate value should be specified.</dd>
<dt>{PAGESIZE}</dt>
<dd><br>
This is not actually a limit, but an implementation parameter. No profile should impose a requirement on this value.</dd>
<dt>{PATH_MAX}</dt>
<dd><br>
Historically, the minimum has been either 1024 or indefinite, depending on the implementation. Few applications actually require
values larger than 256, but some users may create file hierarchies that must be accessed with longer paths. This value should only
be changed if there is a clear requirement.</dd>
<dt>{PIPE_BUF}</dt>
<dd><br>
The current minimum is adequate for most applications. Historically, it has been larger. If applications that write single
transactions larger than this are anticipated, it should be increased. Applications that write lines of text larger than this
probably do not need it increased, as the text line is delimited by a &lt;newline&gt;.</dd>
<dt>{POSIX_VERSION}</dt>
<dd><br>
This is actually not a limit, but a standard version stamp. Generally, a profile should specify IEEE&nbsp;Std&nbsp;1003.1-2001 by a
name in the normative references section, not this value.</dd>
<dt>{PTHREAD_DESTRUCTOR_ITERATIONS}</dt>
<dd><br>
It is unlikely that applications will need larger values to avoid loss of memory resources.</dd>
<dt>{PTHREAD_KEYS_MAX}</dt>
<dd><br>
The current value should be adequate for most profiles.</dd>
<dt>{PTHREAD_STACK_MIN}</dt>
<dd><br>
This should not be treated as an actual limit, but as an implementation parameter. No profile should impose a requirement on this
value.</dd>
<dt>{PTHREAD_THREADS_MAX}</dt>
<dd><br>
It is believed that most implementations will provide larger values.</dd>
<dt>{RTSIG_MAX}</dt>
<dd><br>
The current limit was chosen so that the set of POSIX.1 signal numbers can fit within a 32-bit field. It is recognized that most
existing implementations define many more signals than are specified in POSIX.1 and, in fact, many implementations have already
exceeded 32 signals (including the &quot;null signal&quot;). Support of {_POSIX_RTSIG_MAX} additional signals may push some implementations
over the single 32-bit word line, but is unlikely to push any implementations that are already over that line beyond the 64 signal
line.</dd>
<dt>{SEM_NSEMS_MAX}</dt>
<dd><br>
The current value should be adequate for most profiles.</dd>
<dt>{SEM_VALUE_MAX}</dt>
<dd><br>
The current value should be adequate for most profiles.</dd>
<dt>{SSIZE_MAX}</dt>
<dd><br>
This limit reflects fundamental hardware characteristics (the size of an integer), and should not be specified unless it is clearly
required. Extreme care should be taken to assure that any value that might be specified does not unnecessarily eliminate
implementations because of accidents of hardware design.</dd>
<dt>{STREAM_MAX}</dt>
<dd><br>
This limit is very closely related to {OPEN_MAX}. It should never be larger than {OPEN_MAX}, but could reasonably be smaller for
application areas where most files are not accessed through <i>stdio</i>. Some implementations may limit {STREAM_MAX} to 20 but
allow {OPEN_MAX} to be considerably larger. Such implementations should be allowed for if the applications permit.</dd>
<dt>{TIMER_MAX}</dt>
<dd><br>
The current limit should be adequate for most profiles, but it may need to be larger for applications with a large number of
asynchronous operations.</dd>
<dt>{TTY_NAME_MAX}</dt>
<dd><br>
This is not actually a limit, but an implementation parameter. No profile should impose a requirement on this value.</dd>
<dt>{TZNAME_MAX}</dt>
<dd><br>
The minimum has been historically adequate, but if longer timezone names are anticipated (particularly such values as UTC-1), this
should be increased.</dd>
</dl>
<h4><a name="tag_04_03_06"></a>Optional Behavior</h4>
<p>In IEEE&nbsp;Std&nbsp;1003.1-2001, there are no instances of the terms unspecified, undefined, implementation-defined, or with
the verbs &quot;may&quot; or &quot;need not&quot;, that the developers of IEEE&nbsp;Std&nbsp;1003.1-2001 anticipate or sanction as suitable for
profile or test method citation. All of these are merely warnings to conforming applications to avoid certain areas that can vary
from system to system, and even over time on the same system. In many cases, these terms are used explicitly to support extensions,
but profiles should not anticipate and require such extensions; future versions of IEEE&nbsp;Std&nbsp;1003.1 may do so.</p>
<hr size="2" noshade>
<center><font size="2"><!--footer start-->
UNIX &reg; is a registered Trademark of The Open Group.<br>
POSIX &reg; is a registered Trademark of The IEEE.<br>
[ <a href="../mindex.html">Main Index</a> | <a href="../basedefs/contents.html">XBD</a> | <a href=
"../utilities/contents.html">XCU</a> | <a href="../functions/contents.html">XSH</a> | <a href="../xrat/contents.html">XRAT</a>
]</font></center>
<!--footer end-->
<hr size="2" noshade>
<hr>
<h4><a name="tag_04_03_07"></a>Footnotes</h4>
<dl compact>
<dt><a name="tag_foot_1">1.</a></dt>
<dd>The utilities listed with an asterisk here and later in this section are present only on systems which support the User
Portability Utilities option. There may be further restrictions on the utilities offered with various configuration option
combinations; see the individual utility descriptions.</dd>
<dt><a name="tag_foot_2">2.</a></dt>
<dd>There are no formally approved profiles of IEEE&nbsp;Std&nbsp;1003.1-2001 at the time of publication; the reference here is to
various profiles generated by private bodies or governments.</dd>
</dl>
</body>
</html>