
NAME
open - 打開基於檔案或命令管道的一茬q道
` SYNOPSIS
open fileName
open fileName access
open fileName access permissions
_________________________________________________________________
yz DESCRIPTION
這茤R令打開一蚗仵蛂B串行端口、或命令管道並返回一 |
通道標識符用於將來被命令如 read、puts、和close 調用。如果 fileName
的第一茼r符不是「|」則命令打開一蚗仵: fileName 給出-
n打開的檔案的名字,並且它必須符合在 filename 手冊條目中描z的規範。
如果存在 access
參數,則它指示以何種方式訪問檔案(或命令管道)。在第一種形式下 access
可以是下列:
r 為只讀而打開檔案;檔案必須已經存在。如果未指定 access
則這蚧是預設C
r+ 為讀寫而打開檔案;檔案必須已經存在。
w 為只寫而打開檔案。如果檔案已經存在則截斷(truncate)它,如果檔案不存在則建立一-
虓s檔案。
w+ 為讀寫而打開檔案。如果檔案已經存在則截斷(truncate)它,如果檔案不存在則建立一-
虓s檔案。
a 為只讀而打開檔案。如果檔案不存在,則建立一-
虓s的空檔案。設置初始訪問位置為檔案的結束處。
a+ 為讀寫而打開檔案。如果檔案不存在,則建立一-
虓s的空檔案。設置初始訪問位置為檔案的結束處。
在第二種形式下,access 由某些下列標誌的一茼C表構成,所有這些都有標準的
POSIX 意義。 必須有一蚍郅x是 RDONLY、WRONLY 或 RDWR 中的一荂C
RDONLY 為只讀而打開檔案。
WRONLY 為只寫而打開檔案。
RDWR 為讀寫而打開檔案。
APPEND 在每次寫之前把指針設置到檔案的結束處。
CREAT 如果檔案不存在則建立這蚗仵(如果沒有這-
蚍郅x,在檔案不存在時返回一蚇欞~)。
EXCL 如果還指定了 CREAT,如果檔案已經存在則返回一蚇欞~。
NOCTTY 如果檔案是一茞袟摀]備,這蚍郅x防止這蚗仵蛈足偃o-
荈i程的控制終端。
NONBLOCK 在打開檔案和可能的後續 I/O
操作期間防止過程阻塞。這-
蚍郅x的真實行為是依賴於系統的和依賴於設備的;不鼓勵使用它(更好是使用
fconfigure 命令來使一-
蚗仵袪i入非阻塞模式)。詳情參見你的系統文件中的 open
系統調用的 O_NONBLOCK 標誌。
TRUNC 如果檔案存在則截斷其為零長度。
如果作為打開過程的一部分而建立了一虓s檔案,使用 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.
ROD COMMAND PIPELINES
如果 fileName is 的第一茼r符是「|」,則把 fileName
的餘下的字符被作為描zn調用的一茤R令管道的參數的一茼C表來對待,與 exec
對待參數的方式相同。在這種情況下,依賴於 access 的A使用由 open
返回的通道標識符來向這-
茤R令的輸入管道寫或從它的輸出管道讀。如果使用了只寫訪問(例如, access
是 w),則除非被這茤R令所屏棄(override),這-
(命令)管道的標準輸出被定向到當前的標準輸出上。如果使用了只讀訪問(例如,access
是 r),則除非被這茤R令所屏棄(override),這-
(命令)管道的標準輸入接受當前的標準輸入。
譯注
打開用來寫的命令管道
Tcl ==> Pipeline ==> command
+--------+ +--------+ +--------+ +--------+
| stdin |<------+ stdin | +-->| pipein | +--+ stdin |
+--------+ +--------+ | +--------+ | +--------+
| stdout |<--+---+ stdout | | | pipeout|<--+ | stdout +--+
+--------+ | +--------+ | +--------+ +--------+ |
| | stderr | | | stderr | |
| +--------+ | +--------+ |
| | channel+--+ |
| +--------+ |
+-----------------------------------------------+
打開一茈峔蚥牧漫R令管道
+-----------------------------------------------+
| |
+--------+ | +--------+ +--------+ +--------+ |
| stdin |<--+---+ stdin | | pipein |<--+ | stdin +--+
+--------+ +--------+ +--------+ | +--------+
| stdout |<------+ stdout | +-->| pipeout| +--+ stdout |
+--------+ +--------+ | +--------+ +--------+
| stderr | | | stderr |
+--------+ | +--------+
| channel+--+
+--------+
Tcl <== Pipeline <== command
qH SERIAL COMMUNICATIONS
如果 fileName 參照一茼磞皞搕f,則打開特定的串行端口並以依賴於- |
台的方式初始化。給 fileName 用以打開一茼磞皞搕f的可接受的b移植- |
n點中描z。 |
tm CONFIGURATION OPTIONS |
使用 fconfigure 命令來為打開的串行端口查詢和設置下列選項: |
-mode |
baud,parity,data,stop | |
這蚇龠筋O由逗號分隔的四蚧的一荈隻X: 這- |
茼磞皞搕f的波特(baud)率、奇偶校驗(parity)、數據位數、和停止位。baud|
率是指定連接速度的一蚋眾瞉蒱CParity 是下列字母之一: |
n、o、e、m、s;分別表示奇偶校驗選項「none」、「odd」、「even」、「mark」、或「space」。Data|
是數據位數,應當是從 5 到 8 中的一蚞蒱A而 stop |
是停止位的數目,應當是整數 1 或 2。 |
-pollinterval |
msec | |
只在 Windows 上串行端口能獲得這- |
蚇龠窗A它被用來設置檔案事件輪詢(poll)之間的最大時間。這影響整 |
Tcl 解釋器檢查事件中間的時間間隔(總是採用最小的)。只有在你想- |
n使輪詢這茼磞皞搕f的時間間隔小於 10 msec (預設)時才使用這- |
蚇龠窗C |
-lasterror ||
只在 Windows 上串行端口能獲得這- |
蚇龠窗A並只能查詢(只在直接請求時報告)。在串行通信出錯的情況下,read|
或 puts 返回一茪@般 Tcl 檔案 I/O 錯誤。可以調用 fconfigure |
-lasterror 來得到錯誤詳情的一茼C表(例如,FRAME RXOVER)。
nI PORTABILITY ISSUES |
Windows |
(所有版本) | |
給 fileName 來打開一茼磞皞搕f的有效漣峖′O comX:,這裏 X |
是一蚍A一般是從 1 到 4。如果系統有多於四茼磞皞搕f,則這- |
茞顫(notation)可以表示串行端口從 1 到 9。嘗試打開一- |
茪ㄕs在或序號大於 9 的串行端口將導- |
P錯誤。打開串行端口的可替代的方法是使用檔名 \\.\comX,這裏 X |
是對應於一茼磞皞搕f的任何(整)數;請注意,這茪隤k在 Windows |
95 和 Windows 98 上相當的慢。 |
Windows |
NT | |
在交互運行 Tcl 的時唌A如果存在一- |
荓惆謋x,則在真實的控制台和使用標準輸入或輸出的一- |
茤R令管道之間可能有一些奇怪的相互作用。如果為讀而打開一- |
茤R令管道,在這- |
荓惆謋x鍵入的一些行將被發送到命令管道而一些行將別發送到 Tcl |
求飽C如果為寫而打開一茤R令管道,在管道關閉之前,在這- |
荓惆謋x中鍵入的擊鍵(keystroke)將一直是不可見的。在執行 |
16-bit 或 32-bit |
應用程式時都可能發生這種事情。這些問題只發生在 Tcl |
和子應用程式同時競爭這荓惆謋x的時唌C如果命令管道是從一- |
蚑Z本中啟動的,所以 Tcl |
不訪問控制台,或者命令管道不使用標準輸出或輸出,而是- |
咿w向(從或)到一蚗仵蛂A那麼上z問題不發生。 |
Windows |
95 | |
不能同時為讀寫而打開一茤R令管道來執行一 16-bit DOS |
應用程式,因為從一蚨瑐D接收標準輸入和向一蚨瑐D發送標準輸出的(兩- |
) 16-bit DOS 應用程式同步運行。不執行 16-bit DOS |
應用程式的命令管道異步運行並且可以同時為讀寫而打開。 |
在交互運行 Tcl 的時唌A如果存在一- |
荓惆謋x,則在真實的控制台和使用標準輸入或輸出的一- |
茤R令管道之間可能有一些奇怪的相互作用。如果為從一 32-bit |
應用程式讀而打開一茤R令管道,在這- |
荓惆謋x鍵入的一些擊鍵將被發送到命令管道而一些擊鍵將別發送到 |
Tcl 求飽C如果為向一 32-bit 應用程式寫而打開一- |
茤R令管道,在管道關閉之前,在控制台中將一直沒有輸出是可見的。這些問題只發生在|
Tcl 和子應用程式同時競爭這荓惆謋x的時唌C如果命令管道是從一- |
蚑Z本中啟動的,所以 Tcl |
不訪問控制台,或者命令管道不使用標準輸出或輸出,而是- |
咿w向(從或)到一蚗仵蛂A那麼上z問題不發生。 |
不論 Tcl 是否在交互的運行,如果為從一 16-bit DOS |
應用程式讀而打開一- |
茤R令管道,在從命令管道的標準輸出收到檔案結束之前,對 open |
的調用一直不返回。如果為向一 16-bit DOS 應用程式寫而打開一- |
茤R令管道,在管道實際上被關閉之前,沒有數據被發送到命令管道的標準輸出。像上-|
探yz的那樣,這荌暋D發生的鴞]是 16-bit DOS 應用程式同步運行。 |
Macintosh ||
在 Macintosh 下目前未實現打開串行端口。 |
在 Macintosh 不支持打開命令管道,- |
鴞]是應用程式不支持標準輸入或輸出的概念。 |
Unix ||
給 fileName 來打開一茼磞皞搕f的有效漣峖′O /dev/ttyX,這裏的 |
X 是 a 或 b,但是可以使用映射到一- |
茼磞皞搕f的任何偽檔案(pseudo-file)的名字。 |
在交互運行 Tcl 的時唌A如果存在一- |
荓惆謋x,則在真實的控制台和使用標準輸入或輸出的一- |
茤R令管道之間可能有一些奇怪的相互作用。如果為讀而打開一- |
茤R令管道,在這- |
荓惆謋x鍵入的一些行將被發送到命令管道而一些行將別發送到 Tcl |
求飽C這些問題只發生在 Tcl 和子應用程式同時競爭這- |
荓惆謋x的時唌C如果命令管道是從一蚑Z本中啟動的,所以 Tcl |
不訪問控制台,或者命令管道不使用標準輸出或輸出,而是- |
咿w向(從或)到一蚗仵蛂A那麼上z問題不發生。 |
關於在不同孕x上執行應用程式請參見 exec 命令- |
nSEE ALSO |
file(n), close(n), filename(n), fconfigure(n), gets(n), read(n), |
puts(n), exec(n), fopen(1) |
r KEYWORDS |
access mode, append, create, file, non-blocking, open, permissions, |
pipeline, process, serial |
[] |
Hhh |
[] |
2001/10/16 |
m Linux manUpn: |
http://cmpp.linuxforum.net |