open.n
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:18k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1993 The Regents of the University of California.
  3. '" Copyright (c) 1994-1996 Sun Microsystems, Inc.
  4. '"
  5. '" See the file "license.terms" for information on usage and redistribution
  6. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  7. '" 
  8. '" RCS: @(#) $Id: open.n,v 1.16.2.4 2006/03/16 21:11:57 andreas_kupries Exp $
  9. '" 
  10. .so man.macros
  11. .TH open n 8.3 Tcl "Tcl Built-In Commands"
  12. .BS
  13. '" Note:  do not modify the .SH NAME line immediately below!
  14. .SH NAME
  15. open - Open a file-based or command pipeline channel
  16. .SH SYNOPSIS
  17. .sp
  18. fBopen fIfileNamefR
  19. .br
  20. fBopen fIfileName accessfR
  21. .br
  22. fBopen fIfileName access permissionsfR
  23. .BE
  24. .SH DESCRIPTION
  25. .PP
  26. This command opens a file, serial port, or command pipeline and returns a
  27. channel identifier that may be used in future invocations of commands like
  28. fBreadfR, fBputsfR, and fBclosefR.
  29. If the first character of fIfileNamefR is not fB|fR then
  30. the command opens a file:
  31. fIfileNamefR gives the name of the file to open, and it must conform to the
  32. conventions described in the fBfilenamefR manual entry.
  33. .PP
  34. The fIaccessfR argument, if present, indicates the way in which the file
  35. (or command pipeline) is to be accessed.
  36. In the first form fIaccessfR may have any of the following values:
  37. .TP 15
  38. fBrfR
  39. Open the file for reading only; the file must already exist. This is the
  40. default value if fIaccessfR is not specified.
  41. .TP 15
  42. fBr+fR
  43. Open the file for both reading and writing; the file must
  44. already exist.
  45. .TP 15
  46. fBwfR
  47. Open the file for writing only.  Truncate it if it exists.  If it doesn't
  48. exist, create a new file.
  49. .TP 15
  50. fBw+fR
  51. Open the file for reading and writing.  Truncate it if it exists.
  52. If it doesn't exist, create a new file.
  53. .TP 15
  54. fBafR
  55. Open the file for writing only.  If the file doesn't exist,
  56. create a new empty file.
  57. Set the file pointer to the end of the file prior to each write.
  58. .TP 15
  59. fBa+fR
  60. Open the file for reading and writing.  If the file doesn't exist,
  61. create a new empty file.
  62. Set the initial access position  to the end of the file.
  63. .PP
  64. In the second form, fIaccessfR consists of a list of any of the
  65. following flags, all of which have the standard POSIX meanings.
  66. One of the flags must be either fBRDONLYfR, fBWRONLYfR or fBRDWRfR.
  67. .TP 15
  68. fBRDONLYfR
  69. Open the file for reading only.
  70. .TP 15
  71. fBWRONLYfR
  72. Open the file for writing only.
  73. .TP 15
  74. fBRDWRfR
  75. Open the file for both reading and writing.
  76. .TP 15
  77. fBAPPENDfR
  78. Set the file pointer to the end of the file prior to each write.
  79. .TP 15
  80. fBCREATfR
  81. Create the file if it doesn't already exist (without this flag it
  82. is an error for the file not to exist).
  83. .TP 15
  84. fBEXCLfR
  85. If fBCREATfR is also specified, an error is returned if the
  86. file already exists.
  87. .TP 15
  88. fBNOCTTYfR
  89. If the file is a terminal device, this flag prevents the file from
  90. becoming the controlling terminal of the process.
  91. .TP 15
  92. fBNONBLOCKfR
  93. Prevents the process from blocking while opening the file, and
  94. possibly in subsequent I/O operations.  The exact behavior of
  95. this flag is system- and device-dependent;  its use is discouraged
  96. (it is better to use the fBfconfigurefR command to put a file
  97. in nonblocking mode).
  98. For details refer to your system documentation on the fBopenfR system
  99. call's fBO_NONBLOCKfR flag.
  100. .TP 15
  101. fBTRUNCfR
  102. If the file exists it is truncated to zero length.
  103. .PP
  104. If a new file is created as part of opening it, fIpermissionsfR
  105. (an integer) is used to set the permissions for the new file in
  106. conjunction with the process's file mode creation mask.
  107. fIPermissionsfR defaults to 0666.
  108. .PP
  109. Note that if you are going to be reading or writing binary data from
  110. the channel created by this command, you should use the
  111. fBfconfigurefR command to change the fB-translationfR option of
  112. the channel to fBbinaryfR before transferring any binary data.  This
  113. is in contrast to the ``b'' character passed as part of the equivalent
  114. of the fIaccessfR parameter to some versions of the C library
  115. fIfopen()fR function.
  116. .SH "COMMAND PIPELINES"
  117. .PP
  118. If the first character of fIfileNamefR is ``|'' then the
  119. remaining characters of fIfileNamefR are treated as a list of arguments
  120. that describe a command pipeline to invoke, in the same style as the
  121. arguments for fBexecfR.
  122. In this case, the channel identifier returned by fBopenfR may be used
  123. to write to the command's input pipe or read from its output pipe,
  124. depending on the value of fIaccessfR.
  125. If write-only access is used (e.g. fIaccessfR is fBwfR), then
  126. standard output for the pipeline is directed to the current standard
  127. output unless overridden by the command.
  128. If read-only access is used (e.g. fIaccessfR is fBrfR),
  129. standard input for the pipeline is taken from the current standard
  130. input unless overridden by the command.
  131. The id of the spawned process is accessible through the fBpidfR
  132. command, using the channel id returned by fBopenfR as argument.
  133. .PP
  134. If the command (or one of the commands) executed in the command
  135. pipeline returns an error (according to the definition in fBexecfR),
  136. a Tcl error is generated when fBclosefR is called on the channel
  137. unless the pipeline is in non-blocking mode then no exit status is
  138. returned (a silent fBclosefR with -blocking 0).
  139. .PP
  140. It is often useful to use the fBfileeventfR command with pipelines
  141. so other processing may happen at the same time as running the command
  142. in the background.
  143. .VS 8.4
  144. .SH "SERIAL COMMUNICATIONS"
  145. .PP
  146. If fIfileNamefR refers to a serial port, then the specified serial port
  147. is opened and initialized in a platform-dependent manner.  Acceptable
  148. values for the fIfileNamefR to use to open a serial port are described in
  149. the PORTABILITY ISSUES section.
  150. .PP
  151. The fBfconfigurefR command can be used to query and set additional
  152. configuration options specific to serial ports (where supported):
  153. .TP
  154. fB-modefR fIbaudfB,fIparityfB,fIdatafB,fIstopfR
  155. This option is a set of 4 comma-separated values: the baud rate, parity,
  156. number of data bits, and number of stop bits for this serial port.  The
  157. fIbaudfR rate is a simple integer that specifies the connection speed.
  158. fIParityfR is one of the following letters: fBnfR, fBofR, fBefR,
  159. fBmfR, fBsfR; respectively signifying the parity options of ``none'',
  160. ``odd'', ``even'', ``mark'', or ``space''.  fIDatafR is the number of
  161. data bits and should be an integer from 5 to 8, while fIstopfR is the
  162. number of stop bits and should be the integer 1 or 2.
  163. .TP
  164. fB-handshakefR fItypefR
  165. (Windows and Unix). This option is used to setup automatic handshake
  166. control. Note that not all handshake types maybe supported by your operating
  167. system. The fItypefR parameter is case-independent.
  168. .sp
  169. If fItypefR is fBnonefR then any handshake is switched off.
  170. fBrtsctsfR activates hardware handshake. Hardware handshake signals
  171. are described below.
  172. For software handshake fBxonxofffR the handshake characters can be redefined
  173. with fB-xcharfR.
  174. An additional hardware handshake fBdtrdsrfR is available only under Windows.
  175. There is no default handshake configuration, the initial value depends
  176. on your operating system settings.
  177. The fB-handshakefR option cannot be queried.
  178. .TP
  179. fB-queuefR
  180. (Windows and Unix). The fB-queuefR option can only be queried.
  181. It returns a list of two integers representing the current number
  182. of bytes in the input and output queue respectively.
  183. .TP
  184. fB-timeoutfR fImsecfR
  185. (Windows and Unix). This option is used to set the timeout for blocking
  186. read operations. It specifies the maximum interval between the
  187. reception of two bytes in milliseconds.
  188. For Unix systems the granularity is 100 milliseconds.
  189. The fB-timeoutfR option does not affect write operations or
  190. nonblocking reads.
  191. This option cannot be queried.
  192. .TP
  193. fB-ttycontrolfR fI{signal boolean signal boolean ...}fR
  194. (Windows and Unix). This option is used to setup the handshake
  195. output lines (see below) permanently or to send a BREAK over the serial line.
  196. The fIsignalfR names are case-independent.
  197. fB{RTS 1 DTR 0}fR sets the RTS output to high and the DTR output to low.
  198. The BREAK condition (see below) is enabled and disabled with fB{BREAK 1}fR and
  199. fB{BREAK 0}fR respectively.
  200. It's not a good idea to change the fBRTSfR (or fBDTRfR) signal
  201. with active hardware handshake fBrtsctsfR (or fBdtrdsrfR).
  202. The result is unpredictable.
  203. The fB-ttycontrolfR option cannot be queried.
  204. .TP
  205. fB-ttystatusfR
  206. (Windows and Unix). The fB-ttystatusfR option can only be
  207. queried.  It returns the current modem status and handshake input signals
  208. (see below).
  209. The result is a list of signal,value pairs with a fixed order,
  210. e.g. fB{CTS 1 DSR 0 RING 1 DCD 0}fR.
  211. The fIsignalfR names are returned upper case.
  212. .TP
  213. fB-xcharfR fI{xonChar xoffChar}fR
  214. (Windows and Unix). This option is used to query or change the software
  215. handshake characters. Normally the operating system default should be
  216. DC1 (0x11) and DC3 (0x13) representing the ASCII standard
  217. XON and XOFF characters.
  218. .TP
  219. fB-pollintervalfR fImsecfR
  220. (Windows only). This option is used to set the maximum time between
  221. polling for fileevents.
  222. This affects the time interval between checking for events throughout the Tcl
  223. interpreter (the smallest value always wins).  Use this option only if
  224. you want to poll the serial port more or less often than 10 msec
  225. (the default).
  226. .TP
  227. fB-sysbufferfR fIinSizefR
  228. .TP
  229. fB-sysbufferfR fI{inSize outSize}fR
  230. (Windows only). This option is used to change the size of Windows
  231. system buffers for a serial channel. Especially at higher communication
  232. rates the default input buffer size of 4096 bytes can overrun
  233. for latent systems. The first form specifies the input buffer size,
  234. in the second form both input and output buffers are defined.
  235. .TP
  236. fB-lasterrorfR
  237. (Windows only). This option is query only.
  238. In case of a serial communication error, fBreadfR or fBputsfR
  239. returns a general Tcl file I/O error.
  240. fBfconfigure -lasterrorfR can be called to get a list of error details.
  241. See below for an explanation of the various error codes.
  242. .SH "SERIAL PORT SIGNALS"
  243. .PP
  244. RS-232 is the most commonly used standard electrical interface for serial
  245. communications. A negative voltage (-3V..-12V) define a mark (on=1) bit and
  246. a positive voltage (+3..+12V) define a space (off=0) bit (RS-232C).  The
  247. following signals are specified for incoming and outgoing data, status
  248. lines and handshaking. Here we are using the terms fIworkstationfR for
  249. your computer and fImodemfR for the external device, because some signal
  250. names (DCD, RI) come from modems. Of course your external device may use
  251. these signal lines for other purposes.
  252. .IP fBTXD(output)fR
  253. fBTransmitted Data:fR Outgoing serial data.
  254. .IP fBRXD(input)fR
  255. fBReceived Data:fRIncoming serial data.
  256. .IP fBRTS(output)fR
  257. fBRequest To Send:fR This hardware handshake line informs the modem that
  258. your workstation is ready to receive data. Your workstation may
  259. automatically reset this signal to indicate that the input buffer is full.
  260. .IP fBCTS(input)fR
  261. fBClear To Send:fR The complement to RTS. Indicates that the modem is
  262. ready to receive data.
  263. .IP fBDTR(output)fR
  264. fBData Terminal Ready:fR This signal tells the modem that the workstation
  265. is ready to establish a link. DTR is often enabled automatically whenever a
  266. serial port is opened.
  267. .IP fBDSR(input)fR
  268. fBData Set Ready:fR The complement to DTR. Tells the workstation that the
  269. modem is ready to establish a link.
  270. .IP fBDCD(input)fR
  271. fBData Carrier Detect:fR This line becomes active when a modem detects
  272. a "Carrier" signal.
  273. .IP fBRI(input)fR
  274. fBRing Indicator:fR Goes active when the modem detects an incoming call.
  275. .IP fBBREAKfR
  276. A BREAK condition is not a hardware signal line, but a logical zero on the
  277. TXD or RXD lines for a long period of time, usually 250 to 500
  278. milliseconds.  Normally a receive or transmit data signal stays at the mark
  279. (on=1) voltage until the next character is transferred. A BREAK is sometimes
  280. used to reset the communications line or change the operating mode of
  281. communications hardware.
  282. .SH "ERROR CODES (Windows only)"
  283. .PP
  284. A lot of different errors may occur during serial read operations or during
  285. event polling in background. The external device may have been switched
  286. off, the data lines may be noisy, system buffers may overrun or your mode
  287. settings may be wrong.  That's why a reliable software should always
  288. fBcatchfR serial read operations.  In cases of an error Tcl returns a
  289. general file I/O error.  Then fBfconfigure -lasterrorfR may help to
  290. locate the problem.  The following error codes may be returned.
  291. .TP 10
  292. fBRXOVERfR
  293. Windows input buffer overrun. The data comes faster than your scripts reads
  294. it or your system is overloaded. Use fBfconfigure -sysbufferfR to avoid a
  295. temporary bottleneck and/or make your script faster.
  296. .TP 10
  297. fBTXFULLfR
  298. Windows output buffer overrun. Complement to RXOVER. This error should
  299. practically not happen, because Tcl cares about the output buffer status.
  300. .TP 10
  301. fBOVERRUNfR
  302. UART buffer overrun (hardware) with data lost.
  303. The data comes faster than the system driver receives it.
  304. Check your advanced serial port settings to enable the FIFO (16550) buffer
  305. and/or setup a lower(1) interrupt threshold value.
  306. .TP 10
  307. fBRXPARITYfR
  308. A parity error has been detected by your UART.
  309. Wrong parity settings with fBfconfigure -modefR or a noisy data line (RXD)
  310. may cause this error.
  311. .TP 10
  312. fBFRAMEfR
  313. A stop-bit error has been detected by your UART.
  314. Wrong mode settings with fBfconfigure -modefR or a noisy data line (RXD)
  315. may cause this error.
  316. .TP 10
  317. fBBREAKfR
  318. A BREAK condition has been detected by your UART (see above).
  319. .VE
  320. .SH "PORTABILITY ISSUES"
  321. .TP
  322. fBWindows fR(all versions)
  323. Valid values for fIfileNamefR to open a serial port are of the form
  324. fBcomfIXfB:fR, where fIXfR is a number, generally from 1 to 4.
  325. This notation only works for serial ports from 1 to 9, if the system
  326. happens to have more than four.  An attempt to open a serial port that
  327. does not exist or has a number greater than 9 will fail.  An alternate
  328. form of opening serial ports is to use the filename fBee.ecomXfR,
  329. where X is any number that corresponds to a serial port; please note
  330. that this method is considerably slower on Windows 95 and Windows 98.
  331. .TP
  332. fBWindows NTfR
  333. When running Tcl interactively, there may be some strange interactions
  334. between the real console, if one is present, and a command pipeline that uses
  335. standard input or output.  If a command pipeline is opened for reading, some
  336. of the lines entered at the console will be sent to the command pipeline and
  337. some will be sent to the Tcl evaluator.  If a command pipeline is opened for
  338. writing, keystrokes entered into the console are not visible until the
  339. pipe is closed.  This behavior occurs whether the command pipeline is
  340. executing 16-bit or 32-bit applications.  These problems only occur because
  341. both Tcl and the child application are competing for the console at
  342. the same time.  If the command pipeline is started from a script, so that Tcl
  343. is not accessing the console, or if the command pipeline does not use
  344. standard input or output, but is redirected from or to a file, then the
  345. above problems do not occur.  
  346. .TP
  347. fBWindows 95fR 
  348. A command pipeline that executes a 16-bit DOS application cannot be opened
  349. for both reading and writing, since 16-bit DOS applications that receive
  350. standard input from a pipe and send standard output to a pipe run
  351. synchronously.  Command pipelines that do not execute 16-bit DOS
  352. applications run asynchronously and can be opened for both reading and
  353. writing.  
  354. .sp
  355. When running Tcl interactively, there may be some strange interactions
  356. between the real console, if one is present, and a command pipeline that uses
  357. standard input or output.  If a command pipeline is opened for reading from
  358. a 32-bit application, some of the keystrokes entered at the console will be
  359. sent to the command pipeline and some will be sent to the Tcl evaluator.  If
  360. a command pipeline is opened for writing to a 32-bit application, no output
  361. is visible on the console until the pipe is closed.  These problems only
  362. occur because both Tcl and the child application are competing for the
  363. console at the same time.  If the command pipeline is started from a script,
  364. so that Tcl is not accessing the console, or if the command pipeline does
  365. not use standard input or output, but is redirected from or to a file, then
  366. the above problems do not occur.  
  367. .sp
  368. Whether or not Tcl is running interactively, if a command pipeline is opened
  369. for reading from a 16-bit DOS application, the call to fBopenfR will not
  370. return until end-of-file has been received from the command pipeline's
  371. standard output.  If a command pipeline is opened for writing to a 16-bit DOS
  372. application, no data will be sent to the command pipeline's standard output
  373. until the pipe is actually closed.  This problem occurs because 16-bit DOS
  374. applications are run synchronously, as described above.  
  375. .TP
  376. fBMacintoshfR
  377. Opening a serial port is not currently implemented under Macintosh.
  378. .sp
  379. Opening a command pipeline is not supported under Macintosh, since 
  380. applications do not support the concept of standard input or output.
  381. .TP
  382. fBUnixfR
  383. Valid values for fIfileNamefR to open a serial port are generally of the
  384. form fB/dev/ttyfIXfR, where fIXfR is fBafR or fBbfR, but the name
  385. of any pseudo-file that maps to a serial port may be used.
  386. .VS 8.4
  387. Advanced configuration options are only supported for serial ports
  388. when Tcl is built to use the POSIX serial interface.
  389. .VE 8.4
  390. .sp
  391. When running Tcl interactively, there may be some strange interactions
  392. between the console, if one is present, and a command pipeline that uses
  393. standard input.  If a command pipeline is opened for reading, some
  394. of the lines entered at the console will be sent to the command pipeline and
  395. some will be sent to the Tcl evaluator.  This problem only occurs because
  396. both Tcl and the child application are competing for the console at the
  397. same time.  If the command pipeline is started from a script, so that Tcl is
  398. not accessing the console, or if the command pipeline does not use standard
  399. input, but is redirected from a file, then the above problem does not occur.  
  400. .LP
  401. See the PORTABILITY ISSUES section of the fBexecfR command for additional
  402. information not specific to command pipelines about executing
  403. applications on the various platforms
  404. .SH "EXAMPLE"
  405. Open a command pipeline and catch any errors:
  406. .CS
  407. set fl [fBopenfR "| ls this_file_does_not_exist"]
  408. set data [read $fl]
  409. if {[catch {close $fl} err]} {
  410.     puts "ls command failed: $err"
  411. }
  412. .CE
  413. .SH "SEE ALSO"
  414. file(n), close(n), filename(n), fconfigure(n), gets(n), read(n),
  415. puts(n), exec(n), pid(n), fopen(3)
  416. .SH KEYWORDS
  417. access mode, append, create, file, non-blocking, open, permissions,
  418. pipeline, process, serial