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 │
              上串行端口能獲得這個選項,並只能查詢(只在直接請求時報告)。在串行通信出錯的情況下,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,這裏的      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