diff options
Diffstat (limited to 'posix_users/process_environment.rst')
-rw-r--r-- | posix_users/process_environment.rst | 807 |
1 files changed, 0 insertions, 807 deletions
diff --git a/posix_users/process_environment.rst b/posix_users/process_environment.rst deleted file mode 100644 index 0556d12..0000000 --- a/posix_users/process_environment.rst +++ /dev/null @@ -1,807 +0,0 @@ -.. comment SPDX-License-Identifier: CC-BY-SA-4.0 - -.. COMMENT: COPYRIGHT (c) 1988-2002. -.. COMMENT: On-Line Applications Research Corporation (OAR). -.. COMMENT: All rights reserved. - -Process Environment Manager -########################### - -Introduction -============ - -The process environment manager is responsible for providing the functions -related to user and group Id management. - -The directives provided by the process environment manager are: - -- getpid_ - Get Process ID - -- getppid_ - Get Parent Process ID - -- getuid_ - Get User ID - -- geteuid_ - Get Effective User ID - -- getgid_ - Get Real Group ID - -- getegid_ - Get Effective Group ID - -- setuid_ - Set User ID - -- setgid_ - Set Group ID - -- getgroups_ - Get Supplementary Group IDs - -- getlogin_ - Get User Name - -- getlogin_r_ - Reentrant Get User Name - -- getpgrp_ - Get Process Group ID - -- setsid_ - Create Session and Set Process Group ID - -- setpgid_ - Set Process Group ID for Job Control - -- uname_ - Get System Name - -- times_ - Get Process Times - -- getenv_ - Get Environment Variables - -- setenv_ - Set Environment Variables - -- ctermid_ - Generate Terminal Pathname - -- ttyname_ - Determine Terminal Device Name - -- ttyname_r_ - Reentrant Determine Terminal Device Name - -- isatty_ - Determine if File Descriptor is Terminal - -- sysconf_ - Get Configurable System Variables - -Background -========== - -Users and Groups ----------------- - -RTEMS provides a single process, multi-threaded execution environment. In this -light, the notion of user and group is somewhat without meaning. But RTEMS -does provide services to provide a synthetic version of user and group. By -default, a single user and group is associated with the application. Thus -unless special actions are taken, every thread in the application shares the -same user and group Id. The initial rationale for providing user and group Id -functionality in RTEMS was for the filesystem infrastructure to implement file -permission checks. The effective user/group Id capability has since been used -to implement permissions checking by the ``ftpd`` server. - -In addition to the "real" user and group Ids, a process may have an effective -user/group Id. This allows a process to function using a more limited -permission set for certain operations. - -User and Group Names --------------------- - -POSIX considers user and group Ids to be a unique integer that may be -associated with a name. This is usually accomplished via a file named -:file:`/etc/passwd` for user Id mapping and :file:`/etc/groups` for group Id -mapping. Again, although RTEMS is effectively a single process and thus single -user system, it provides limited support for user and group names. When -configured with an appropriate filesystem, RTEMS will access the appropriate -files to map user and group Ids to names. - -If these files do not exist, then RTEMS will synthesize a minimal version so -this family of services return without error. It is important to remember that -a design goal of the RTEMS POSIX services is to provide useable and meaningful -results even though a full process model is not available. - -Environment Variables ---------------------- - -POSIX allows for variables in the run-time environment. These are name/value -pairs that make be dynamically set and obtained by programs. In a full POSIX -environment with command line shell and multiple processes, environment -variables may be set in one process - such as the shell - and inherited by -child processes. In RTEMS, there is only one process and thus only one set of -environment variables across all processes. - -Operations -========== - -Accessing User and Group Ids ----------------------------- - -The user Id associated with the current thread may be obtain using the -``getuid()`` service. Similarly, the group Id may be obtained using the -``getgid()`` service. - -Accessing Environment Variables -------------------------------- - -The value associated with an environment variable may be obtained using the -``getenv()`` service and set using the ``putenv()`` service. - -Directives -========== - -This section details the process environment manager's directives. A -subsection is dedicated to each of this manager's directives and describes the -calling sequence, related constants, usage, and status codes. - -.. _getpid: - -getpid - Get Process ID ------------------------ -.. index:: getpid -.. index:: get process id - -**CALLING SEQUENCE:** - -.. code-block:: c - - int getpid( void ); - -**STATUS CODES:** - -The process Id is returned. - -**DESCRIPTION:** - -This service returns the process Id. - -**NOTES:** - -NONE - -.. _getppid: - -getppid - Get Parent Process ID -------------------------------- -.. index:: getppid -.. index:: get parent process id - -**CALLING SEQUENCE:** - -.. code-block:: c - - int getppid( void ); - -**STATUS CODES:** - -The parent process Id is returned. - -**DESCRIPTION:** - -This service returns the parent process Id. - -**NOTES:** - -NONE - -.. _getuid: - -getuid - Get User ID --------------------- -.. index:: getuid -.. index:: get user id - -**CALLING SEQUENCE:** - -.. code-block:: c - - int getuid( void ); - -**STATUS CODES:** - -The effective user Id is returned. - -**DESCRIPTION:** - -This service returns the effective user Id. - -**NOTES:** - -NONE - -.. _geteuid: - -geteuid - Get Effective User ID -------------------------------- -.. index:: geteuid -.. index:: get effective user id - -**CALLING SEQUENCE:** - -.. code-block:: c - - int geteuid( void ); - -**STATUS CODES:** - -The effective group Id is returned. - -**DESCRIPTION:** - -This service returns the effective group Id. - -**NOTES:** - -NONE - -.. _getgid: - -getgid - Get Real Group ID --------------------------- -.. index:: getgid -.. index:: get real group id - -**CALLING SEQUENCE:** - -.. code-block:: c - - int getgid( void ); - -**STATUS CODES:** - -The group Id is returned. - -**DESCRIPTION:** - -This service returns the group Id. - -**NOTES:** - -NONE - -.. _getegid: - -getegid - Get Effective Group ID --------------------------------- -.. index:: getegid -.. index:: get effective group id - -**CALLING SEQUENCE:** - -.. code-block:: c - - int getegid( void ); - -**STATUS CODES:** - -The effective group Id is returned. - -**DESCRIPTION:** - -This service returns the effective group Id. - -**NOTES:** - -NONE - -.. _setuid: - -setuid - Set User ID --------------------- -.. index:: setuid -.. index:: set user id - -**CALLING SEQUENCE:** - -.. code-block:: c - - int setuid( - uid_t uid - ); - -**STATUS CODES:** - -This service returns 0. - -**DESCRIPTION:** - -This service sets the user Id to ``uid``. - -**NOTES:** - -NONE - -.. _setgid: - -setgid - Set Group ID ---------------------- -.. index:: setgid -.. index:: set group id - -**CALLING SEQUENCE:** - -.. code-block:: c - - int setgid( - gid_t gid - ); - -**STATUS CODES:** - -This service returns 0. - -**DESCRIPTION:** - -This service sets the group Id to ``gid``. - -**NOTES:** - -NONE - -.. _getgroups: - -getgroups - Get Supplementary Group IDs ---------------------------------------- -.. index:: getgroups -.. index:: get supplementary group ids - -**CALLING SEQUENCE:** - -.. code-block:: c - - int getgroups( - int gidsetsize, - gid_t grouplist[] - ); - -**STATUS CODES:** - -NA - -**DESCRIPTION:** - -This service is not implemented as RTEMS has no notion of supplemental groups. - -**NOTES:** - -If supported, this routine would only be allowed for the super-user. - -.. _getlogin: - -getlogin - Get User Name ------------------------- -.. index:: getlogin -.. index:: get user name - -**CALLING SEQUENCE:** - -.. code-block:: c - - char *getlogin( void ); - -**STATUS CODES:** - -Returns a pointer to a string containing the name of the current user. - -**DESCRIPTION:** - -This routine returns the name of the current user. - -**NOTES:** - -This routine is not reentrant and subsequent calls to ``getlogin()`` will -overwrite the same buffer. - -.. _getlogin_r: - -getlogin_r - Reentrant Get User Name ------------------------------------- -.. index:: getlogin_r -.. index:: reentrant get user name -.. index:: get user name, reentrant - -**CALLING SEQUENCE:** - -.. code-block:: c - - int getlogin_r( - char *name, - size_t namesize - ); - -**STATUS CODES:** - -.. list-table:: - :class: rtems-table - - * - ``EINVAL`` - - The arguments were invalid. - -**DESCRIPTION:** - -This is a reentrant version of the ``getlogin()`` service. The caller -specified their own buffer, ``name``, as well as the length of this buffer, -``namesize``. - -**NOTES:** - -NONE - -.. _getpgrp: - -getpgrp - Get Process Group ID ------------------------------- -.. index:: getpgrp -.. index:: get process group id - -**CALLING SEQUENCE:** - -.. code-block:: c - - pid_t getpgrp( void ); - -**STATUS CODES:** - -The procress group Id is returned. - -**DESCRIPTION:** - -This service returns the current progress group Id. - -**NOTES:** - -This routine is implemented in a somewhat meaningful way for RTEMS but is truly -not functional. - -.. _setsid: - -setsid - Create Session and Set Process Group ID ------------------------------------------------- -.. index:: setsid -.. index:: create session and set process group id - -**CALLING SEQUENCE:** - -.. code-block:: c - - pid_t setsid( void ); - -**STATUS CODES:** - -.. list-table:: - :class: rtems-table - - * - ``EPERM`` - - The application does not have permission to create a process group. - -**DESCRIPTION:** - -This routine always returns ``EPERM`` as RTEMS has no way to create new -processes and thus no way to create a new process group. - -**NOTES:** - -NONE - -.. _setpgid: - -setpgid - Set Process Group ID for Job Control ----------------------------------------------- -.. index:: setpgid -.. index:: set process group id for job control - -**CALLING SEQUENCE:** - -.. code-block:: c - - int setpgid( - pid_t pid, - pid_t pgid - ); - -**STATUS CODES:** - -.. list-table:: - :class: rtems-table - - * - ``ENOSYS`` - - The routine is not implemented. - -**DESCRIPTION:** - -This service is not implemented for RTEMS as process groups are not supported. - -**NOTES:** - -NONE - -.. _uname: - -uname - Get System Name ------------------------ -.. index:: uname -.. index:: get system name - -**CALLING SEQUENCE:** - -.. code-block:: c - - int uname( - struct utsname *name - ); - -**STATUS CODES:** - -.. list-table:: - :class: rtems-table - - * - ``EPERM`` - - The provided structure pointer is invalid. - -**DESCRIPTION:** - -This service returns system information to the caller. It does this by filling -in the ``struct utsname`` format structure for the caller. - -**NOTES:** - -The information provided includes the operating system (RTEMS in all -configurations), the node number, the release as the RTEMS version, and the CPU -family and model. The CPU model name will indicate the multilib executive -variant being used. - -.. _times: - -times - Get process times -------------------------- -.. index:: times -.. index:: get process times - -**CALLING SEQUENCE:** - -.. code-block:: c - - #include <sys/time.h> - clock_t times( - struct tms *ptms - ); - -**STATUS CODES:** - -This routine returns the number of clock ticks that have elapsed since the -system was initialized (e.g. the application was started). - -**DESCRIPTION:** - -``times`` stores the current process times in ``ptms``. The format of ``struct -tms`` is as defined in ``<sys/times.h>``. RTEMS fills in the field -``tms_utime`` with the number of ticks that the calling thread has executed and -the field ``tms_stime`` with the number of clock ticks since system boot (also -returned). All other fields in the ``ptms`` are left zero. - -**NOTES:** - -RTEMS has no way to distinguish between user and system time so this routine -returns the most meaningful information possible. - -.. _getenv: - -getenv - Get Environment Variables ----------------------------------- -.. index:: getenv -.. index:: get environment variables - -**CALLING SEQUENCE:** - -.. code-block:: c - - char *getenv( - const char *name - ); - -**STATUS CODES:** - -.. list-table:: - :class: rtems-table - - * - ``NULL`` - - when no match - * - `pointer to value` - - when successful - -**DESCRIPTION:** - -This service searches the set of environment variables for a string that -matches the specified ``name``. If found, it returns the associated value. - -**NOTES:** - -The environment list consists of name value pairs that are of the form ``name = -value``. - -.. _setenv: - -setenv - Set Environment Variables ----------------------------------- -.. index:: setenv -.. index:: set environment variables - -**CALLING SEQUENCE:** - -.. code-block:: c - - int setenv( - const char *name, - const char *value, - int overwrite - ); - -**STATUS CODES:** - -Returns 0 if successful and -1 otherwise. - -**DESCRIPTION:** - -This service adds the variable ``name`` to the environment with ``value``. If -``name`` is not already exist, then it is created. If ``name`` exists and -``overwrite`` is zero, then the previous value is not overwritten. - -**NOTES:** - -NONE - -.. _ctermid: - -ctermid - Generate Terminal Pathname ------------------------------------- -.. index:: ctermid -.. index:: generate terminal pathname - -**CALLING SEQUENCE:** - -.. code-block:: c - - char *ctermid( - char *s - ); - -**STATUS CODES:** - -Returns a pointer to a string indicating the pathname for the controlling -terminal. - -**DESCRIPTION:** - -This service returns the name of the terminal device associated with this -process. If ``s`` is NULL, then a pointer to a static buffer is returned. -Otherwise, ``s`` is assumed to have a buffer of sufficient size to contain the -name of the controlling terminal. - -**NOTES:** - -By default on RTEMS systems, the controlling terminal is :file:`/dev/console`. -Again this implementation is of limited meaning, but it provides true and -useful results which should be sufficient to ease porting applications from a -full POSIX implementation to the reduced profile supported by RTEMS. - -.. _ttyname: - -ttyname - Determine Terminal Device Name ----------------------------------------- -.. index:: ttyname -.. index:: determine terminal device name - -**CALLING SEQUENCE:** - -.. code-block:: c - - char *ttyname( - int fd - ); - -**STATUS CODES:** - -Pointer to a string containing the terminal device name or ``NULL`` is returned -on any error. - -**DESCRIPTION:** - -This service returns a pointer to the pathname of the terminal device that is -open on the file descriptor ``fd``. If ``fd`` is not a valid descriptor for a -terminal device, then NULL is returned. - -**NOTES:** - -This routine uses a static buffer. - -.. _ttyname_r: - -ttyname_r - Reentrant Determine Terminal Device Name ----------------------------------------------------- -.. index:: ttyname_r -.. index:: reentrant determine terminal device name - -**CALLING SEQUENCE:** - -.. code-block:: c - - int ttyname_r( - int fd, - char *name, - int namesize - ); - -**STATUS CODES:** - -This routine returns -1 and sets ``errno`` as follows: - -.. list-table:: - :class: rtems-table - - * - ``EBADF`` - - If not a valid descriptor for a terminal device. - * - ``EINVAL`` - - If ``name`` is ``NULL`` or ``namesize`` are insufficient. - -**DESCRIPTION:** - -This service the pathname of the terminal device that is open on the file -descriptor ``fd``. - -**NOTES:** - -NONE - -.. _isatty: - -isatty - Determine if File Descriptor is Terminal -------------------------------------------------- -.. index:: isatty -.. index:: determine if file descriptor is terminal - -**CALLING SEQUENCE:** - -.. code-block:: c - - int isatty( - int fd - ); - -**STATUS CODES:** - -Returns 1 if ``fd`` is a terminal device and 0 otherwise. - -**DESCRIPTION:** - -This service returns 1 if ``fd`` is an open file descriptor connected to a -terminal and 0 otherwise. - -**NOTES:** - -.. _sysconf: - -sysconf - Get Configurable System Variables -------------------------------------------- -.. index:: sysconf -.. index:: get configurable system variables - -**CALLING SEQUENCE:** - -.. code-block:: c - - long sysconf( - int name - ); - -**STATUS CODES:** - -The value returned is the actual value of the system resource. If the -requested configuration name is a feature flag, then 1 is returned if the -available and 0 if it is not. On any other error condition, -1 is returned. - -**DESCRIPTION:** - -This service is the mechanism by which an application determines values for -system limits or options at runtime. - -**NOTES:** - -Much of the information that may be obtained via ``sysconf`` has equivalent -macros in ``unistd.h``. However, those macros reflect conservative limits -which may have been altered by application configuration. |