Provided by: manpages-zh_1.6.3.6-1_all bug

NAME

       open - 打开基于文件或命令管道的一个通道

总览 SYNOPSIS

       open fileName
       open fileName access
       open fileName access permissions
_________________________________________________________________

描述 DESCRIPTION

       这个命令打开一个文件、串行端口、或命令管道并返回一个            通道标识符用于将来被命令如 │
       readputs、和close 调用。如果 fileName 的第一个字符不是“|”则命令打开一个文件: fileName 给
       出要打开的文件的名字,并且它必须符合在 filename 手册条目中描述的规范。

       如果存在 access 参数,则它指示以何种方式访问文件(或命令管道)。在第一种形式下 access 可以是
       下列值:

       r              为只读而打开文件;文件必须已经存在。如果未指定  access       则这个值是缺省
                      值。

       r+             为读写而打开文件;文件必须已经存在。

       w              为只写而打开文件。如果文件已经存在则截断(truncate)它,如果文件不存在则建立
                      一个新文件。

       w+             为读写而打开文件。如果文件已经存在则截断(truncate)它,如果文件不存在则建立
                      一个新文件。

       a              为只读而打开文件。如果文件不存在,则建立一个新的空文件。设置初始访问位置为
                      文件的结束处。

       a+             为读写而打开文件。如果文件不存在,则建立一个新的空文件。设置初始访问位置为
                      文件的结束处。

       在第二种形式下,access  由某些下列标志的一个列表构成,所有这些都有标准的 POSIX 意义。 必须
       有一个标志是 RDONLYWRONLYRDWR 中的一个。

       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, you should use the fconfigure command to change the -translation option │
       of the channel to binary before transferring any binary data.  This is in contrast to  the │
       ``b''  character passed as part of the equivalent of the access parameter to some versions │
       of the C library fopen() function.

命令管道 COMMAND PIPELINES

       如果 fileName is 的第一个字符是“|”,则把 fileName 的余下的字符被作为描述要调用的一个命令管
       道的参数的一个列表来对待,与 exec 对待参数的方式相同。在这种情况下,依赖于 access 的值,使
       用由   open   返回的通道标识符来向这个命令的输入管道写或从它的输出管道读。如果使用了只写访
       问(例如, accessw),则除非被这个命令所屏弃(override),这个(命令)管道的标准输出被定向到
       当前的标准输出上。如果使用了只读访问(例如,accessr),则除非被这个命令所屏
       弃(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 用以打开一个串行端口的可接受的值在移植要点中描述。                                │

配置选项 CONFIGURATION OPTIONS                                                                    │
       使用 fconfigure 命令来为打开的串行端口查询和设置下列选项:                                  │

       -mode baud,parity,data,stop                                                                │
              这个选项是由逗号分隔的四个值的一个集合:          这个串行端口的波特(baud)率、奇偶校 │
              验(parity)、数据位数、和停止位。baud         率是指定连接速度的一个简单整数。Parity │
              是下列字母之一:                                 noems;分别表示奇偶校验选项 │
              “none”、“odd”、“even”、“mark”、或“space”。Data     是数据位数,应当是从 5 到 8 中的 │
              一个整数,而 stop     是停止位的数目,应当是整数 1 或 2。                           │

       -pollinterval msec                                                                         │
              只在 Windows     上串行端口能获得这个选项,它被用来设置文件事件轮询(poll)之间的最大 │
              时间。这影响整个     Tcl 解释器检查事件中间的时间间隔(总是采用最小的值)。只有在你想 │
              要使轮询这个串行端口的时间间隔小于     10 msec (缺省值)时才使用这个选项。           │

       -lasterror                                                                                 │
              只在 Windows 上串行端口能获得这个选项,并只能查询(只在直接请求时报告)。在串行通信出 │
              错的情况下,readputs   返回一个一般  Tcl  文件  I/O      错误。可以调用 │
              fconfigure -lasterror     来得到错误详情的一个列表(例如,FRAME RXOVER)。

移植要点 PORTABILITY ISSUESWindows (所有版本)                                                                         │
              给 fileName 来打开一个串行端口的有效值的形式是 comX:,这里     X 是一个数,一般是从 │
              1 到 4。如果系统有多于四个串行端口,则这个符号(notation)可以表示串行端口从     1 到 │
              9。尝试打开一个不存在或序号大于 9      的串行端口将导致错误。打开串行端口的可替代的 │
              方法是使用文件名    \\.\comX,这里 X 是对应于一个串行端口的任何(整)数;请注意,这个 │
              方法在     Windows 95 和 Windows 98 上相当的慢。                                    │

       Windows NT                                                                                 │
              在交互运行 Tcl     的时候,如果存在一个控制台,则在真实的控制台和使用标准输入或输出 │
              的一个命令管道之间可能有一些奇怪的相互作用。如果为读而打开一个命令管道,在这个控制  │
              台键入的一些行将被发送到命令管道而一些行将别发送到     Tcl     求值器。如果为写而打 │
              开一个命令管道,在管道关闭之前,在这个控制台中键入的击键(keystroke)将一直是不可见   │
              的。在执行     16-bit 或 32-bit      应用程序时都可能发生这种事情。这些问题只发生在 │
              Tcl      和子应用程序同时竞争这个控制台的时候。如果命令管道是从一个脚本中启动的,所 │
              以     Tcl     不访问控制台,或者命令管道不使用标准输出或输出,而是重定向(从或)到一 │
              个文件,那么上述问题不发生。                                                        │

       Windows 95                                                                                 │
              不能同时为读写而打开一个命令管道来执行一个  16-bit DOS     应用程序,因为从一个管道 │
              接收标准输入和向一个管道发送标准输出的(两个)     16-bit DOS  应用程序同步运行。不执 │
              行 16-bit DOS     应用程序的命令管道异步运行并且可以同时为读写而打开。              │

              在交互运行 Tcl     的时候,如果存在一个控制台,则在真实的控制台和使用标准输入或输出 │
              的一个命令管道之间可能有一些奇怪的相互作用。如果为从一个     32-bit      应用程序读 │
              而打开一个命令管道,在这个控制台键入的一些击键将被发送到命令管道而一些击键将别发送  │
              到     Tcl 求值器。如果为向一个 32-bit     应用程序写而打开一个命令管道,在管道关闭 │
              之前,在控制台中将一直没有输出是可见的。这些问题只发生在     Tcl     和子应用程序同 │
              时竞争这个控制台的时候。如果命令管道是从一个脚本中启动的,所以     Tcl     不访问控 │
              制台,或者命令管道不使用标准输出或输出,而是重定向(从或)到一个文件,那么上述问题不  │
              发生。                                                                              │

              不论 Tcl 是否在交互的运行,如果为从一个 16-bit  DOS      应用程序读而打开一个命令管 │
              道,在从命令管道的标准输出收到文件结束之前,对      open 的调用一直不返回。如果为向 │
              一个 16-bit DOS      应用程序写而打开一个命令管道,在管道实际上被关闭之前,没有数据 │
              被发送到命令管道的标准输出。象上面描述的那样,这个问题发生的原因是      16-bit  DOS │
              应用程序同步运行。                                                                  │

       Macintosh                                                                                  │
              在 Macintosh 下目前未实现打开串行端口。                                             │

              在 Macintosh     不支持打开命令管道,原因是应用程序不支持标准输入或输出的概念。     │

       Unix                                                                                       │
              给 fileName 来打开一个串行端口的有效值的形式是  /dev/ttyX,这里的      Xa  或 │
              b,但是可以使用映射到一个串行端口的任何伪文件(pseudo-file)的名字。                  │

              在交互运行 Tcl     的时候,如果存在一个控制台,则在真实的控制台和使用标准输入或输出 │
              的一个命令管道之间可能有一些奇怪的相互作用。如果为读而打开一个命令管道,在这个控制  │
              台键入的一些行将被发送到命令管道而一些行将别发送到     Tcl 求值器。这些问题只发生在 │
              Tcl      和子应用程序同时竞争这个控制台的时候。如果命令管道是从一个脚本中启动的,所 │
              以     Tcl     不访问控制台,或者命令管道不使用标准输出或输出,而是重定向(从或)到一 │
              个文件,那么上述问题不发生。                                                        │

       关于在不同平台上执行应用程序请参见 exec 命令的移植要点章节来得到不特定于命令管道的额外的信 │
       息。                                                                                       │

参见 SEE ALSO                                                                                     │
       file(n),   close(n),  filename(n),  fconfigure(n),  gets(n),  read(n),  puts(n),  exec(n), │
       fopen(1)                                                                                   │

关键字 KEYWORDS                                                                                   │
       access mode, append, create, file, non-blocking,  open,  permissions,  pipeline,  process, │
       serial                                                                                     │

[中文版维护人]寒蝉退士[中文版最新更新]2001/10/16《中国 Linux 论坛 man 手册页翻译计划》:http://cmpp.linuxforum.net                                                                                                │
       本页面中文版由中文 man 手册页计划提供。                                                    │
       中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh