1 |
578 |
markom |
'\"
|
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.1.1.1 2002-01-16 10:25:24 markom Exp $
|
9 |
|
|
'\"
|
10 |
|
|
.so man.macros
|
11 |
|
|
.TH open n 7.6 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 \fIfileName\fR
|
19 |
|
|
.br
|
20 |
|
|
\fBopen \fIfileName access\fR
|
21 |
|
|
.br
|
22 |
|
|
\fBopen \fIfileName access permissions\fR
|
23 |
|
|
.BE
|
24 |
|
|
|
25 |
|
|
.SH DESCRIPTION
|
26 |
|
|
.PP
|
27 |
|
|
.VS
|
28 |
|
|
This command opens a file, serial port, or command pipeline and returns a
|
29 |
|
|
.VE
|
30 |
|
|
channel identifier that may be used in future invocations of commands like
|
31 |
|
|
\fBread\fR, \fBputs\fR, and \fBclose\fR.
|
32 |
|
|
If the first character of \fIfileName\fR is not \fB|\fR then
|
33 |
|
|
the command opens a file:
|
34 |
|
|
\fIfileName\fR gives the name of the file to open, and it must conform to the
|
35 |
|
|
conventions described in the \fBfilename\fR manual entry.
|
36 |
|
|
.PP
|
37 |
|
|
The \fIaccess\fR argument, if present, indicates the way in which the file
|
38 |
|
|
(or command pipeline) is to be accessed.
|
39 |
|
|
In the first form \fIaccess\fR may have any of the following values:
|
40 |
|
|
.TP 15
|
41 |
|
|
\fBr\fR
|
42 |
|
|
Open the file for reading only; the file must already exist. This is the
|
43 |
|
|
default value if \fIaccess\fR is not specified.
|
44 |
|
|
.TP 15
|
45 |
|
|
\fBr+\fR
|
46 |
|
|
Open the file for both reading and writing; the file must
|
47 |
|
|
already exist.
|
48 |
|
|
.TP 15
|
49 |
|
|
\fBw\fR
|
50 |
|
|
Open the file for writing only. Truncate it if it exists. If it doesn't
|
51 |
|
|
exist, create a new file.
|
52 |
|
|
.TP 15
|
53 |
|
|
\fBw+\fR
|
54 |
|
|
Open the file for reading and writing. Truncate it if it exists.
|
55 |
|
|
If it doesn't exist, create a new file.
|
56 |
|
|
.TP 15
|
57 |
|
|
\fBa\fR
|
58 |
|
|
Open the file for writing only. The file must already exist, and the file
|
59 |
|
|
is positioned so that new data is appended to the file.
|
60 |
|
|
.TP 15
|
61 |
|
|
\fBa+\fR
|
62 |
|
|
Open the file for reading and writing. If the file doesn't exist,
|
63 |
|
|
create a new empty file.
|
64 |
|
|
Set the initial access position to the end of the file.
|
65 |
|
|
.PP
|
66 |
|
|
In the second form, \fIaccess\fR consists of a list of any of the
|
67 |
|
|
following flags, all of which have the standard POSIX meanings.
|
68 |
|
|
One of the flags must be either \fBRDONLY\fR, \fBWRONLY\fR or \fBRDWR\fR.
|
69 |
|
|
.TP 15
|
70 |
|
|
\fBRDONLY\fR
|
71 |
|
|
Open the file for reading only.
|
72 |
|
|
.TP 15
|
73 |
|
|
\fBWRONLY\fR
|
74 |
|
|
Open the file for writing only.
|
75 |
|
|
.TP 15
|
76 |
|
|
\fBRDWR\fR
|
77 |
|
|
Open the file for both reading and writing.
|
78 |
|
|
.TP 15
|
79 |
|
|
\fBAPPEND\fR
|
80 |
|
|
Set the file pointer to the end of the file prior to each write.
|
81 |
|
|
.TP 15
|
82 |
|
|
\fBCREAT\fR
|
83 |
|
|
Create the file if it doesn't already exist (without this flag it
|
84 |
|
|
is an error for the file not to exist).
|
85 |
|
|
.TP 15
|
86 |
|
|
\fBEXCL\fR
|
87 |
|
|
If \fBCREAT\fR is also specified, an error is returned if the
|
88 |
|
|
file already exists.
|
89 |
|
|
.TP 15
|
90 |
|
|
\fBNOCTTY\fR
|
91 |
|
|
If the file is a terminal device, this flag prevents the file from
|
92 |
|
|
becoming the controlling terminal of the process.
|
93 |
|
|
.TP 15
|
94 |
|
|
\fBNONBLOCK\fR
|
95 |
|
|
Prevents the process from blocking while opening the file, and
|
96 |
|
|
possibly in subsequent I/O operations. The exact behavior of
|
97 |
|
|
this flag is system- and device-dependent; its use is discouraged
|
98 |
|
|
(it is better to use the \fBfconfigure\fR command to put a file
|
99 |
|
|
in nonblocking mode).
|
100 |
|
|
For details refer to your system documentation on the \fBopen\fR system
|
101 |
|
|
call's \fBO_NONBLOCK\fR flag.
|
102 |
|
|
.TP 15
|
103 |
|
|
\fBTRUNC\fR
|
104 |
|
|
If the file exists it is truncated to zero length.
|
105 |
|
|
.PP
|
106 |
|
|
If a new file is created as part of opening it, \fIpermissions\fR
|
107 |
|
|
(an integer) is used to set the permissions for the new file in
|
108 |
|
|
conjunction with the process's file mode creation mask.
|
109 |
|
|
\fIPermissions\fR defaults to 0666.
|
110 |
|
|
.SH "COMMAND PIPELINES"
|
111 |
|
|
.PP
|
112 |
|
|
If the first character of \fIfileName\fR is ``|'' then the
|
113 |
|
|
remaining characters of \fIfileName\fR are treated as a list of arguments
|
114 |
|
|
that describe a command pipeline to invoke, in the same style as the
|
115 |
|
|
arguments for \fBexec\fR.
|
116 |
|
|
In this case, the channel identifier returned by \fBopen\fR may be used
|
117 |
|
|
to write to the command's input pipe or read from its output pipe,
|
118 |
|
|
depending on the value of \fIaccess\fR.
|
119 |
|
|
If write-only access is used (e.g. \fIaccess\fR is \fBw\fR), then
|
120 |
|
|
standard output for the pipeline is directed to the current standard
|
121 |
|
|
output unless overridden by the command.
|
122 |
|
|
If read-only access is used (e.g. \fIaccess\fR is \fBr\fR),
|
123 |
|
|
standard input for the pipeline is taken from the current standard
|
124 |
|
|
input unless overridden by the command.
|
125 |
|
|
.SH "SERIAL COMMUNICATIONS"
|
126 |
|
|
.VS
|
127 |
|
|
.PP
|
128 |
|
|
If \fIfileName\fR refers to a serial port, then the specified serial port
|
129 |
|
|
is opened and initialized in a platform-dependent manner. Acceptable
|
130 |
|
|
values for the \fIfileName\fR to use to open a serial port are described in
|
131 |
|
|
the PORTABILITY ISSUES section.
|
132 |
|
|
|
133 |
|
|
.SH "CONFIGURATION OPTIONS"
|
134 |
|
|
The \fBfconfigure\fR command can be used to query and set the following
|
135 |
|
|
configuration option for open serial ports:
|
136 |
|
|
.TP
|
137 |
|
|
\fB\-mode \fIbaud\fB,\fIparity\fB,\fIdata\fB,\fIstop\fR
|
138 |
|
|
.
|
139 |
|
|
This option is a set of 4 comma-separated values: the baud rate, parity,
|
140 |
|
|
number of data bits, and number of stop bits for this serial port. The
|
141 |
|
|
\fIbaud\fR rate is a simple integer that specifies the connection speed.
|
142 |
|
|
\fIParity\fR is one of the following letters: \fBn\fR, \fBo\fR, \fBe\fR,
|
143 |
|
|
\fBm\fR, \fBs\fR; respectively signifying the parity options of ``none'',
|
144 |
|
|
``odd'', ``even'', ``mark'', or ``space''. \fIData\fR is the number of
|
145 |
|
|
data bits and should be an integer from 5 to 8, while \fIstop\fR is the
|
146 |
|
|
number of stop bits and should be the integer 1 or 2.
|
147 |
|
|
.VE
|
148 |
|
|
|
149 |
|
|
.VS
|
150 |
|
|
.SH "PORTABILITY ISSUES"
|
151 |
|
|
.sp
|
152 |
|
|
.TP
|
153 |
|
|
\fBWindows \fR(all versions)
|
154 |
|
|
.
|
155 |
|
|
Valid values for \fIfileName\fR to open a serial port are of the form
|
156 |
|
|
\fBcom\fIX\fB:\fR, where \fIX\fR is a number, generally from 1 to 4. An
|
157 |
|
|
attempt to open a serial port that does not exist will fail.
|
158 |
|
|
.TP
|
159 |
|
|
\fBWindows NT\fR
|
160 |
|
|
.
|
161 |
|
|
When running Tcl interactively, there may be some strange interactions
|
162 |
|
|
between the real console, if one is present, and a command pipeline that uses
|
163 |
|
|
standard input or output. If a command pipeline is opened for reading, some
|
164 |
|
|
of the lines entered at the console will be sent to the command pipeline and
|
165 |
|
|
some will be sent to the Tcl evaluator. If a command pipeline is opened for
|
166 |
|
|
writing, keystrokes entered into the console are not visible until the the
|
167 |
|
|
pipe is closed. This behavior occurs whether the command pipeline is
|
168 |
|
|
executing 16-bit or 32-bit applications. These problems only occur because
|
169 |
|
|
both Tcl and the child application are competing for the console at
|
170 |
|
|
the same time. If the command pipeline is started from a script, so that Tcl
|
171 |
|
|
is not accessing the console, or if the command pipeline does not use
|
172 |
|
|
standard input or output, but is redirected from or to a file, then the
|
173 |
|
|
above problems do not occur.
|
174 |
|
|
.TP
|
175 |
|
|
\fBWindows 95\fR
|
176 |
|
|
.
|
177 |
|
|
A command pipeline that executes a 16-bit DOS application cannot be opened
|
178 |
|
|
for both reading and writing, since 16-bit DOS applications that receive
|
179 |
|
|
standard input from a pipe and send standard output to a pipe run
|
180 |
|
|
synchronously. Command pipelines that do not execute 16-bit DOS
|
181 |
|
|
applications run asynchronously and can be opened for both reading and
|
182 |
|
|
writing.
|
183 |
|
|
.sp
|
184 |
|
|
When running Tcl interactively, there may be some strange interactions
|
185 |
|
|
between the real console, if one is present, and a command pipeline that uses
|
186 |
|
|
standard input or output. If a command pipeline is opened for reading from
|
187 |
|
|
a 32-bit application, some of the keystrokes entered at the console will be
|
188 |
|
|
sent to the command pipeline and some will be sent to the Tcl evaluator. If
|
189 |
|
|
a command pipeline is opened for writing to a 32-bit application, no output
|
190 |
|
|
is visible on the console until the the pipe is closed. These problems only
|
191 |
|
|
occur because both Tcl and the child application are competing for the
|
192 |
|
|
console at the same time. If the command pipeline is started from a script,
|
193 |
|
|
so that Tcl is not accessing the console, or if the command pipeline does
|
194 |
|
|
not use standard input or output, but is redirected from or to a file, then
|
195 |
|
|
the above problems do not occur.
|
196 |
|
|
.sp
|
197 |
|
|
Whether or not Tcl is running interactively, if a command pipeline is opened
|
198 |
|
|
for reading from a 16-bit DOS application, the call to \fBopen\fR will not
|
199 |
|
|
return until end-of-file has been received from the command pipeline's
|
200 |
|
|
standard output. If a command pipeline is opened for writing to a 16-bit DOS
|
201 |
|
|
application, no data will be sent to the command pipeline's standard output
|
202 |
|
|
until the pipe is actually closed. This problem occurs because 16-bit DOS
|
203 |
|
|
applications are run synchronously, as described above.
|
204 |
|
|
.TP
|
205 |
|
|
\fBWindows 3.X\fR
|
206 |
|
|
.
|
207 |
|
|
A command pipeline can execute 16-bit or 32-bit DOS or Windows
|
208 |
|
|
applications, but the call to \fBopen\fR will not return until the last
|
209 |
|
|
program in the pipeline has finished executing; command pipelines run
|
210 |
|
|
synchronously. If the pipeline is opened with write access (either just
|
211 |
|
|
writing or both reading and writing) the first application in the
|
212 |
|
|
pipeline will instead see an immediate end-of-file; any data the caller
|
213 |
|
|
writes to the open pipe will instead be discarded.
|
214 |
|
|
.sp
|
215 |
|
|
Since Tcl cannot be run with a real console under Windows 3.X, there are
|
216 |
|
|
no interactions between command pipelines and the console.
|
217 |
|
|
.TP
|
218 |
|
|
\fBMacintosh\fR
|
219 |
|
|
.
|
220 |
|
|
Opening a serial port is not currently implemented under Macintosh.
|
221 |
|
|
.sp
|
222 |
|
|
Opening a command pipeline is not supported under Macintosh, since
|
223 |
|
|
applications do not support the concept of standard input or output.
|
224 |
|
|
.TP
|
225 |
|
|
\fBUnix\fR\0\0\0\0\0\0\0
|
226 |
|
|
.
|
227 |
|
|
Valid values for \fIfileName\fR to open a serial port are generally of the
|
228 |
|
|
form \fB/dev/tty\fIX\fR, where \fIX\fR is \fBa\fR or \fBb\fR, but the name
|
229 |
|
|
of any pseudo-file that maps to a serial port may be used.
|
230 |
|
|
.sp
|
231 |
|
|
When running Tcl interactively, there may be some strange interactions
|
232 |
|
|
between the console, if one is present, and a command pipeline that uses
|
233 |
|
|
standard input. If a command pipeline is opened for reading, some
|
234 |
|
|
of the lines entered at the console will be sent to the command pipeline and
|
235 |
|
|
some will be sent to the Tcl evaluator. This problem only occurs because
|
236 |
|
|
both Tcl and the child application are competing for the console at the
|
237 |
|
|
same time. If the command pipeline is started from a script, so that Tcl is
|
238 |
|
|
not accessing the console, or if the command pipeline does not use standard
|
239 |
|
|
input, but is redirected from a file, then the above problem does not occur.
|
240 |
|
|
.LP
|
241 |
|
|
See the PORTABILITY ISSUES section of the \fBexec\fR command for additional
|
242 |
|
|
information not specific to command pipelines about executing
|
243 |
|
|
applications on the various platforms
|
244 |
|
|
.SH "SEE ALSO"
|
245 |
|
|
close(n), filename(n), gets(n), read(n), puts(n), exec(n)
|
246 |
|
|
.VE
|
247 |
|
|
.SH KEYWORDS
|
248 |
|
|
access mode, append, create, file, non-blocking, open, permissions,
|
249 |
|
|
pipeline, process, serial
|