Provided by: manpages-zh_1.5.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 │
              上串行端口能獲得這個選項,並只能查詢(只在直接請求時報告)。在串行通信出錯的情況下,read│
              或 puts 返回一個一般 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