bionic (3) open.3tcl.gz

Provided by: manpages-zh_1.6.3.2-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,这里的     Xab,但是可以使用映射 │
              到一个串行端口的任何伪文件(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