Provided by: manpages-zh_1.6.3.6-1_all 

NAME
open - 打开基于文件或命令管道的一个通道
总览 SYNOPSIS
open fileName
open fileName access
open fileName access permissions
_________________________________________________________________
描述 DESCRIPTION
这个命令打开一个文件、串行端口、或命令管道并返回一个 通道标识符用于将来被命令如 read、puts、和close 调 2
用。如果 fileName 的第一个字符不是“|”则命令打开一个文件: fileName 给出要打开的文件的名字,并且它必须符合
在 filename 手册条目中描述的规范。
如果存在 access 参数,则它指示以何种方式访问文件(或命令管道)。在第一种形式下 access 可以是下列值:
r 为只读而打开文件;文件必须已经存在。如果未指定 access 则这个值是缺省值。
r+ 为读写而打开文件;文件必须已经存在。
w 为只写而打开文件。如果文件已经存在则截断(truncate)它,如果文件不存在则建立一个新文件。
w+ 为读写而打开文件。如果文件已经存在则截断(truncate)它,如果文件不存在则建立一个新文件。
a 为只读而打开文件。如果文件不存在,则建立一个新的空文件。设置初始访问位置为文件的结束处。
a+ 为读写而打开文件。如果文件不存在,则建立一个新的空文件。设置初始访问位置为文件的结束处。
在第二种形式下,access 由某些下列标志的一个列表构成,所有这些都有标准的 POSIX 意义。 必须有一个标志是
RDONLY、WRONLY 或 RDWR 中的一个。
RDONLY 为只读而打开文件。
WRONLY 为只写而打开文件。
RDWR 为读写而打开文件。
APPEND 在每次写之前把指针设置到文件的结束处。
CREAT 如果文件不存在则建立这个文件(如果没有这个标志,在文件不存在时返回一个错误)。
EXCL 如果还指定了 CREAT,如果文件已经存在则返回一个错误。
NOCTTY 如果文件是一个终端设备,这个标志防止这个文件成为这个进程的控制终端。
NONBLOCK 在打开文件和可能的后续 I/O
操作期间防止过程阻塞。这个标志的真实行为是依赖于系统的和依赖于设备的;不鼓励使用它(更
好是使用 fconfigure 命令来使一个文件进入非阻塞模式)。详情参见你的系统文档中的
open 系统调用的 O_NONBLOCK 标志。
TRUNC 如果文件存在则截断其为零长度。
如果作为打开过程的一部分而建立了一个新文件,使用 permissions (一个整数)并联合进程的文件模式建立掩码为新文
件设置权限。Permissions 缺省为 0666。
Note that if you are going to be reading or writing binary data from the channel created by this command, 2
you should use the fconfigure command to change the -translation option of the channel to binary before 2
transferring any binary data. This is in contrast to the ``b'' character passed as part of the 2
equivalent of the access parameter to some versions of the C library fopen() function.
命令管道 COMMAND PIPELINES
如果 fileName is 的第一个字符是“|”,则把 fileName 的余下的字符被作为描述要调用的一个命令管道的参数的一个
列表来对待,与 exec 对待参数的方式相同。在这种情况下,依赖于 access 的值,使用由 open 返回的通道标识符来
向这个命令的输入管道写或从它的输出管道读。如果使用了只写访问(例如, access 是 w),则除非被这个命令所屏
弃(override),这个(命令)管道的标准输出被定向到当前的标准输出上。如果使用了只读访问(例如,access 是 r),则
除非被这个命令所屏弃(override),这个(命令)管道的标准输入接受当前的标准输入。
译注
打开用来写的命令管道
Tcl ==> Pipeline ==> command
+--------+ +--------+ +--------+ +--------+
| stdin |<------+ stdin | +-->| pipein | +--+ stdin |
+--------+ +--------+ | +--------+ | +--------+
| stdout |<--+---+ stdout | | | pipeout|<--+ | stdout +--+
+--------+ | +--------+ | +--------+ +--------+ |
| | stderr | | | stderr | |
| +--------+ | +--------+ |
| | channel+--+ |
| +--------+ |
+-----------------------------------------------+
打开一个用来读的命令管道
+-----------------------------------------------+
| |
+--------+ | +--------+ +--------+ +--------+ |
| stdin |<--+---+ stdin | | pipein |<--+ | stdin +--+
+--------+ +--------+ +--------+ | +--------+
| stdout |<------+ stdout | +-->| pipeout| +--+ stdout |
+--------+ +--------+ | +--------+ +--------+
| stderr | | | stderr |
+--------+ | +--------+
| channel+--+
+--------+
Tcl <== Pipeline <== command
串行通信 SERIAL COMMUNICATIONS
如果 fileName 参照一个串行端口,则打开特定的串行端口并以依赖于平台的方式初始化。给 fileName 用以打开一个 2
串行端口的可接受的值在移植要点中描述。 2
配置选项 CONFIGURATION OPTIONS 2
使用 fconfigure 命令来为打开的串行端口查询和设置下列选项: 2
-mode baud,parity,data,stop 2
这个选项是由逗号分隔的四个值的一个集合: 这个串行端口的波特(baud)率、奇偶校验(parity)、数据位 2
数、和停止位。baud 率是指定连接速度的一个简单整数。Parity 是下列字母之一: 2
n、o、e、m、s;分别表示奇偶校验选项“none”、“odd”、“even”、“mark”、或“space”。Data 是数据位 2
数,应当是从 5 到 8 中的一个整数,而 stop 是停止位的数目,应当是整数 1 或 2。 2
-pollinterval msec 2
只在 Windows 上串行端口能获得这个选项,它被用来设置文件事件轮询(poll)之间的最大时间。这影响整 2
个 Tcl 解释器检查事件中间的时间间隔(总是采用最小的值)。只有在你想要使轮询这个串行端口的时间间 2
隔小于 10 msec (缺省值)时才使用这个选项。 2
-lasterror 2
只在 Windows 上串行端口能获得这个选项,并只能查询(只在直接请求时报告)。在串行通信出错的情况 2
下,read 或 puts 返回一个一般 Tcl 文件 I/O 错误。可以调用 fconfigure -lasterror 来得到 2
错误详情的一个列表(例如,FRAME RXOVER)。
移植要点 PORTABILITY ISSUES 2
Windows (所有版本) 2
给 fileName 来打开一个串行端口的有效值的形式是 comX:,这里 X 是一个数,一般是从 1 到 4。如果系 2
统有多于四个串行端口,则这个符号(notation)可以表示串行端口从 1 到 9。尝试打开一个不存在或序号 2
大于 9 的串行端口将导致错误。打开串行端口的可替代的方法是使用文件名 \\.\comX,这里 X 是对应 2
于一个串行端口的任何(整)数;请注意,这个方法在 Windows 95 和 Windows 98 上相当的慢。 2
Windows NT 2
在交互运行 Tcl 的时候,如果存在一个控制台,则在真实的控制台和使用标准输入或输出的一个命令管道 2
之间可能有一些奇怪的相互作用。如果为读而打开一个命令管道,在这个控制台键入的一些行将被发送到命令管 2
道而一些行将别发送到 Tcl 求值器。如果为写而打开一个命令管道,在管道关闭之前,在这个控制台 2
中键入的击键(keystroke)将一直是不可见的。在执行 16-bit 或 32-bit 应用程序时都可能发生这种 2
事情。这些问题只发生在 Tcl 和子应用程序同时竞争这个控制台的时候。如果命令管道是从一个脚本中启 2
动的,所以 Tcl 不访问控制台,或者命令管道不使用标准输出或输出,而是重定向(从或)到一个文 2
件,那么上述问题不发生。 2
Windows 95 2
不能同时为读写而打开一个命令管道来执行一个 16-bit DOS 应用程序,因为从一个管道接收标准输入和向 2
一个管道发送标准输出的(两个) 16-bit DOS 应用程序同步运行。不执行 16-bit DOS 应用程序的命令 2
管道异步运行并且可以同时为读写而打开。 2
在交互运行 Tcl 的时候,如果存在一个控制台,则在真实的控制台和使用标准输入或输出的一个命令管道 2
之间可能有一些奇怪的相互作用。如果为从一个 32-bit 应用程序读而打开一个命令管道,在这个控制 2
台键入的一些击键将被发送到命令管道而一些击键将别发送到 Tcl 求值器。如果为向一个 32-bit 应 2
用程序写而打开一个命令管道,在管道关闭之前,在控制台中将一直没有输出是可见的。这些问题只发生在 2
Tcl 和子应用程序同时竞争这个控制台的时候。如果命令管道是从一个脚本中启动的,所以 Tcl 2
不访问控制台,或者命令管道不使用标准输出或输出,而是重定向(从或)到一个文件,那么上述问题不发生。 2
不论 Tcl 是否在交互的运行,如果为从一个 16-bit DOS 应用程序读而打开一个命令管道,在从命令管道 2
的标准输出收到文件结束之前,对 open 的调用一直不返回。如果为向一个 16-bit DOS 应用程序写而 2
打开一个命令管道,在管道实际上被关闭之前,没有数据被发送到命令管道的标准输出。象上面描述的那样,这 2
个问题发生的原因是 16-bit DOS 应用程序同步运行。 2
Macintosh 2
在 Macintosh 下目前未实现打开串行端口。 2
在 Macintosh 不支持打开命令管道,原因是应用程序不支持标准输入或输出的概念。 2
Unix 2
给 fileName 来打开一个串行端口的有效值的形式是 /dev/ttyX,这里的 X 是 a 或 b,但是可以使用映射 2
到一个串行端口的任何伪文件(pseudo-file)的名字。 2
在交互运行 Tcl 的时候,如果存在一个控制台,则在真实的控制台和使用标准输入或输出的一个命令管道 2
之间可能有一些奇怪的相互作用。如果为读而打开一个命令管道,在这个控制台键入的一些行将被发送到命令管 2
道而一些行将别发送到 Tcl 求值器。这些问题只发生在 Tcl 和子应用程序同时竞争这个控制台的时 2
候。如果命令管道是从一个脚本中启动的,所以 Tcl 不访问控制台,或者命令管道不使用标准输出或 2
输出,而是重定向(从或)到一个文件,那么上述问题不发生。 2
关于在不同平台上执行应用程序请参见 exec 命令的移植要点章节来得到不特定于命令管道的额外的信息。 2
参见 SEE ALSO 2
file(n), close(n), filename(n), fconfigure(n), gets(n), read(n), puts(n), exec(n), fopen(1) 2
关键字 KEYWORDS 2
access mode, append, create, file, non-blocking, open, permissions, pipeline, process, serial 2
[中文版维护人] 2
寒蝉退士 2
[中文版最新更新] 2
2001/10/16 2
《中国 Linux 论坛 man 手册页翻译计划》: 2
http://cmpp.linuxforum.net 2
跋 2
本页面中文版由中文 man 手册页计划提供。 2
中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh 2
Tcl 7.6 open(3tcl)