Provided by: manpages-zh_1.6.3.2-1_all 

NAME
open - 打開基於文件或命令管道的一個通道
總覽 SYNOPSIS
open fileName open fileName access open fileName access permissions _________________________________________________________________
描述 DESCRIPTION
這個命令打開一個文件、串行端口、或命令管道並返回一個 通道標識符用於將來被命令如 read、puts、和close 調 │ 用。如果 fileName 的第一個字符不是“|”則命令打開一個文件: fileName 給出要打開的文件的名字,並且它必須符合 在 filename 手冊條目中描述的規範。 如果存在 access 參數,則它指示以何種方式訪問文件(或命令管道)。在第一種形式下 access 可以是下列值: r 爲只讀而打開文件;文件必須已經存在。如果未指定 access 則這個值是缺省值。 r+ 爲讀寫而打開文件;文件必須已經存在。 w 爲只寫而打開文件。如果文件已經存在則截斷(truncate)它,如果文件不存在則建立一個新文件。 w+ 爲讀寫而打開文件。如果文件已經存在則截斷(truncate)它,如果文件不存在則建立一個新文件。 a 爲只讀而打開文件。如果文件不存在,則建立一個新的空文件。設置初始訪問位置爲文件的結束處。 a+ 爲讀寫而打開文件。如果文件不存在,則建立一個新的空文件。設置初始訪問位置爲文件的結束處。 在第二種形式下,access 由某些下列標誌的一個列表構成,所有這些都有標準的 POSIX 意義。 必須有一個標誌是 RDONLY、WRONLY 或 RDWR 中的一個。 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 返回的通道標識符來 向這個命令的輸入管道寫或從它的輸出管道讀。如果使用了只寫訪問(例如, access 是 w),則除非被這個命令所屏 棄(override),這個(命令)管道的標準輸出被定向到當前的標準輸出上。如果使用了只讀訪問(例如,access 是 r),則 除非被這個命令所屏棄(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 是下列字母之一: │ n、o、e、m、s;分別表示奇偶校驗選項“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 ISSUES │ Windows (所有版本) │ 給 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,這裏的 X 是 a 或 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 │