plucky (3) open.3tcl.gz

Provided by: manpages-zh_1.6.4.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                                                                                                               │
       本頁面中文版由中文 man 手冊頁計劃提供。                                                                   │
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh