The mesg
utility shall control whether other users are allowed to
send messages via write, talk, or other
utilities to a terminal device. The terminal device affected
shall be determined by searching for the first terminal in
the sequence of devices associated with standard input,
standard output, and standard error, respectively. With no
arguments, mesg shall report the current state
without changing it. Processes with appropriate privileges
may be able to send messages to the terminal independent of
the current state.

The following
environment variables shall affect the execution of
mesg:

LANG

Provide a default value for the
internationalization variables that are unset or null. (See
the Base Definitions volume of
IEEE Std 1003.1-2001, Section 8.2,
Internationalization Variables for the precedence of
internationalization variables used to determine the values
of locale categories.)

LC_ALL

If set to a non-empty string value, override the values
of all the other internationalization variables.

LC_CTYPE

Determine the locale for the
interpretation of sequences of bytes of text data as
characters (for example, single-byte as opposed to
multi-byte characters in arguments).

LC_MESSAGES

Determine the locale that
should be used to affect the format and contents of
diagnostic messages written (by mesg) to standard
error.

NLSPATH

Determine the location of
message catalogs for the processing of LC_MESSAGES
.

The mechanism
by which the message status of the terminal is changed is
unspecified. Therefore, unspecified actions may cause the
status of the terminal to change after mesg has
successfully completed. These actions may include, but are
not limited to: another invocation of the mesg
utility, login procedures; invocation of the stty
utility, invocation of the chmod utility or
chmod() function, and so on.

The terminal
changed by mesg is that associated with the standard
input, output, or error, rather than the controlling
terminal for the session. This is because users logged in
more than once should be able to change any of their login
terminals without having to stop the job running in those
sessions. This is not a security problem involving the
terminals of other users because appropriate privileges
would be required to affect the terminal of another
user.

The method of
checking each of the first three file descriptors in
sequence until a terminal is found was adopted from System
V.

The file
/dev/tty is not specified for the terminal device
because it was thought to be too restrictive. Typical
environment changes for the n operand are that write
permissions are removed for others and group
from the appropriate device. It was decided to leave the
actual description of what is done as unspecified because of
potential differences between implementations.

The format for
standard output is unspecified because of differences
between historical implementations. This output is generally
not useful to shell scripts (they can use the exit status),
so exact parsing of the output is unnecessary.

Portions of
this text are reprinted and reproduced in electronic form
from IEEE Std 1003.1, 2003 Edition, Standard for Information
Technology -- Portable Operating System Interface (POSIX),
The Open Group Base Specifications Issue 6, Copyright (C)
2001-2003 by the Institute of Electrical and Electronics
Engineers, Inc and The Open Group. In the event of any
discrepancy between this version and the original IEEE and
The Open Group Standard, the original IEEE and The Open
Group Standard is the referee document. The original
Standard can be obtained online at
http://www.opengroup.org/unix/online.html .