write user [terminal]
write 实用程序可从用户的标准输入中读取行,然后将其写入其他用户的终端。首次调用时,会将以下消息:
Message from sender-login-id (sending-terminal) [date]...
写入 user。成功完成连接后,会向发送者的终端发出两次警告,指明要将发送者键入的内容写入接收者的终端。
如果接收者要回复,只需在收到初始消息后键入
write sender-login-id [sending-terminal]
即可做到。只要在规范输入模式下累计以 NL、EOF 或 EOL 特殊字符分隔的输入行,就会将累计的数据写入其他用户的终端。字符的处理方式如下:
如果键入警报字符,会将警报字符写入接收者的终端。
如果键入清除和删除字符,会按 termios(3C) 界面中所述的方式影响发送者的终端。
如果键入中断或文件结束字符,write 会将相应的消息(在 C 语言环境中,为 EOT\)写入接收者的终端并退出。
如果键入 LC_CTYPE 分类 print 或 space 中的字符,会将这些字符发送到接收者的终端。
当且仅当启用了 stty iexten 本地模式,才会将其他特殊控制字符和多字节或单字节字符(如果其等效宽字符可输出)作为可输出字符处理。
如果键入其他不可输出的字符,会按以下方式将其写入接收者的终端:控制字符将显示为 "^" 后跟相应的 ASCII 字符,设置了高序位的字符将以“元数据”表示法显示。例如,\003 显示为 ^C,\372 显示为 M−z。
要写入多次登录系统的用户的终端,可以使用 terminal 参数指明要写入的终端。否则,接收者的终端是在 /usr/adm/utmpx 中找到的第一个可写用户实例,会将以下信息性消息写入发送者的标准输出,指明选择的终端:
user is logged on more than one place. You are connected to terminal. Other locations are:terminal
可以使用 mesg 实用程序拒绝或授予接收 write 消息的权限。但是,用户的特权可以进一步限制其他用户终端的可访问性域。如果用户缺少执行所请求操作的相应特权,write 实用程序将会失败。
如果在行开头发现了字符 !,则 write 会调用 shell,以将行中的其余数据作为命令执行。
为了获得对其他用户终端的写入权限,write 将对组 ID tty 运行 setgid()(请参见 setuid(2))。
使用 write 时,建议采用以下协议:首次向其他用户执行 write 时,等待其通过 write 发回确认,然后再开始发送。各个用户应该使用特有的信号结束消息(即使用 (o) 表示结束),以便其他用户知道何时回复。要终止会话时,建议使用信号 (oo)(表示会话完毕)。
支持下列操作数:
要将消息写入其终端的人的用户(登录)名。该操作数必须采用 who(1) 实用程序返回的格式。
与 who 实用程序提供的格式相同的终端标识。
有关影响 write 执行的环境变量 LANG、LC_ALL、LC_CTYPE、LC_MESSAGES 和 NLSPATH 的说明,请参见 environ(5)。
将返回以下退出值:
成功完成。
发往的用户未登录或者发往的用户拒绝了权限。
write 的用户和计帐信息
Bourne shell 可执行文件
有关下列属性的说明,请参见 attributes(5):
|
mail(1)、mesg(1)、pr(1)、sh(1)、talk(1)、who(1)、setuid(2)、termios(3C)、attributes(5)、environ(5)、standards(5)
尝试向其终端写入数据的用户未登录。
尝试向其终端写入数据的用户拒绝了该权限(使用 mesg)。
您的终端设置为 mesg n,接收者无法给予回复。
接收者在您开始写入后拒绝了权限 (mesg n)。