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.34 2007/12/13 15:22:33 dgp 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 \fIfileName\fR |
---|
19 | .br |
---|
20 | \fBopen \fIfileName access\fR |
---|
21 | .br |
---|
22 | \fBopen \fIfileName access permissions\fR |
---|
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 | \fBread\fR, \fBputs\fR, and \fBclose\fR. |
---|
29 | If the first character of \fIfileName\fR is not \fB|\fR then |
---|
30 | the command opens a file: |
---|
31 | \fIfileName\fR gives the name of the file to open, and it must conform to the |
---|
32 | conventions described in the \fBfilename\fR manual entry. |
---|
33 | .PP |
---|
34 | The \fIaccess\fR argument, if present, indicates the way in which the file |
---|
35 | (or command pipeline) is to be accessed. |
---|
36 | In the first form \fIaccess\fR may have any of the following values: |
---|
37 | .TP 15 |
---|
38 | \fBr\fR |
---|
39 | Open the file for reading only; the file must already exist. This is the |
---|
40 | default value if \fIaccess\fR 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 | \fBw\fR |
---|
47 | Open the file for writing only. Truncate it if it exists. If it does not |
---|
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 does not exist, create a new file. |
---|
53 | .TP 15 |
---|
54 | \fBa\fR |
---|
55 | Open the file for writing only. If the file does not 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 does not exist, |
---|
61 | create a new empty file. |
---|
62 | Set the initial access position to the end of the file. |
---|
63 | .VS 8.5 |
---|
64 | .PP |
---|
65 | All of the legal \fIaccess\fR values above may have the character |
---|
66 | \fBb\fR added as the second or third character in the value to |
---|
67 | indicate that the opened channel should be configured with the |
---|
68 | \fB\-translation binary\fR option, making the channel suitable for |
---|
69 | reading or writing of binary data. |
---|
70 | .VE 8.5 |
---|
71 | .PP |
---|
72 | In the second form, \fIaccess\fR consists of a list of any of the |
---|
73 | following flags, all of which have the standard POSIX meanings. |
---|
74 | One of the flags must be either \fBRDONLY\fR, \fBWRONLY\fR or \fBRDWR\fR. |
---|
75 | .TP 15 |
---|
76 | \fBRDONLY\fR |
---|
77 | Open the file for reading only. |
---|
78 | .TP 15 |
---|
79 | \fBWRONLY\fR |
---|
80 | Open the file for writing only. |
---|
81 | .TP 15 |
---|
82 | \fBRDWR\fR |
---|
83 | Open the file for both reading and writing. |
---|
84 | .TP 15 |
---|
85 | \fBAPPEND\fR |
---|
86 | Set the file pointer to the end of the file prior to each write. |
---|
87 | .VS 8.5 |
---|
88 | .TP 15 |
---|
89 | \fBBINARY\fR |
---|
90 | Configure the opened channel with the \fB\-translation binary\fR option. |
---|
91 | .VE 8.5 |
---|
92 | .TP 15 |
---|
93 | \fBCREAT\fR |
---|
94 | Create the file if it does not already exist (without this flag it |
---|
95 | is an error for the file not to exist). |
---|
96 | .TP 15 |
---|
97 | \fBEXCL\fR |
---|
98 | If \fBCREAT\fR is also specified, an error is returned if the |
---|
99 | file already exists. |
---|
100 | .TP 15 |
---|
101 | \fBNOCTTY\fR |
---|
102 | If the file is a terminal device, this flag prevents the file from |
---|
103 | becoming the controlling terminal of the process. |
---|
104 | .TP 15 |
---|
105 | \fBNONBLOCK\fR |
---|
106 | Prevents the process from blocking while opening the file, and |
---|
107 | possibly in subsequent I/O operations. The exact behavior of |
---|
108 | this flag is system- and device-dependent; its use is discouraged |
---|
109 | (it is better to use the \fBfconfigure\fR command to put a file |
---|
110 | in nonblocking mode). |
---|
111 | For details refer to your system documentation on the \fBopen\fR system |
---|
112 | call's \fBO_NONBLOCK\fR flag. |
---|
113 | .TP 15 |
---|
114 | \fBTRUNC\fR |
---|
115 | If the file exists it is truncated to zero length. |
---|
116 | .PP |
---|
117 | If a new file is created as part of opening it, \fIpermissions\fR |
---|
118 | (an integer) is used to set the permissions for the new file in |
---|
119 | conjunction with the process's file mode creation mask. |
---|
120 | \fIPermissions\fR defaults to 0666. |
---|
121 | .SH "COMMAND PIPELINES" |
---|
122 | .PP |
---|
123 | If the first character of \fIfileName\fR is |
---|
124 | .QW | |
---|
125 | then the |
---|
126 | remaining characters of \fIfileName\fR are treated as a list of arguments |
---|
127 | that describe a command pipeline to invoke, in the same style as the |
---|
128 | arguments for \fBexec\fR. |
---|
129 | In this case, the channel identifier returned by \fBopen\fR may be used |
---|
130 | to write to the command's input pipe or read from its output pipe, |
---|
131 | depending on the value of \fIaccess\fR. |
---|
132 | If write-only access is used (e.g. \fIaccess\fR is \fBw\fR), then |
---|
133 | standard output for the pipeline is directed to the current standard |
---|
134 | output unless overridden by the command. |
---|
135 | If read-only access is used (e.g. \fIaccess\fR is \fBr\fR), |
---|
136 | standard input for the pipeline is taken from the current standard |
---|
137 | input unless overridden by the command. |
---|
138 | The id of the spawned process is accessible through the \fBpid\fR |
---|
139 | command, using the channel id returned by \fBopen\fR as argument. |
---|
140 | .PP |
---|
141 | If the command (or one of the commands) executed in the command |
---|
142 | pipeline returns an error (according to the definition in \fBexec\fR), |
---|
143 | a Tcl error is generated when \fBclose\fR is called on the channel |
---|
144 | unless the pipeline is in non-blocking mode then no exit status is |
---|
145 | returned (a silent \fBclose\fR with -blocking 0). |
---|
146 | .PP |
---|
147 | It is often useful to use the \fBfileevent\fR command with pipelines |
---|
148 | so other processing may happen at the same time as running the command |
---|
149 | in the background. |
---|
150 | .SH "SERIAL COMMUNICATIONS" |
---|
151 | .PP |
---|
152 | If \fIfileName\fR refers to a serial port, then the specified serial port |
---|
153 | is opened and initialized in a platform-dependent manner. Acceptable |
---|
154 | values for the \fIfileName\fR to use to open a serial port are described in |
---|
155 | the PORTABILITY ISSUES section. |
---|
156 | .PP |
---|
157 | The \fBfconfigure\fR command can be used to query and set additional |
---|
158 | configuration options specific to serial ports (where supported): |
---|
159 | .TP |
---|
160 | \fB\-mode\fR \fIbaud\fB,\fIparity\fB,\fIdata\fB,\fIstop\fR |
---|
161 | This option is a set of 4 comma-separated values: the baud rate, parity, |
---|
162 | number of data bits, and number of stop bits for this serial port. The |
---|
163 | \fIbaud\fR rate is a simple integer that specifies the connection speed. |
---|
164 | \fIParity\fR is one of the following letters: \fBn\fR, \fBo\fR, \fBe\fR, |
---|
165 | \fBm\fR, \fBs\fR; respectively signifying the parity options of |
---|
166 | .QW none , |
---|
167 | .QW odd , |
---|
168 | .QW even , |
---|
169 | .QW mark , |
---|
170 | or |
---|
171 | .QW space . |
---|
172 | \fIData\fR is the number of |
---|
173 | data bits and should be an integer from 5 to 8, while \fIstop\fR is the |
---|
174 | number of stop bits and should be the integer 1 or 2. |
---|
175 | .TP |
---|
176 | \fB\-handshake\fR \fItype\fR |
---|
177 | (Windows and Unix). This option is used to setup automatic handshake |
---|
178 | control. Note that not all handshake types maybe supported by your operating |
---|
179 | system. The \fItype\fR parameter is case-independent. |
---|
180 | .RS |
---|
181 | .PP |
---|
182 | If \fItype\fR is \fBnone\fR then any handshake is switched off. |
---|
183 | \fBrtscts\fR activates hardware handshake. Hardware handshake signals |
---|
184 | are described below. |
---|
185 | For software handshake \fBxonxoff\fR the handshake characters can be redefined |
---|
186 | with \fB\-xchar\fR. |
---|
187 | An additional hardware handshake \fBdtrdsr\fR is available only under Windows. |
---|
188 | There is no default handshake configuration, the initial value depends |
---|
189 | on your operating system settings. |
---|
190 | The \fB\-handshake\fR option cannot be queried. |
---|
191 | .RE |
---|
192 | .TP |
---|
193 | \fB\-queue\fR |
---|
194 | (Windows and Unix). The \fB\-queue\fR option can only be queried. |
---|
195 | It returns a list of two integers representing the current number |
---|
196 | of bytes in the input and output queue respectively. |
---|
197 | .TP |
---|
198 | \fB\-timeout\fR \fImsec\fR |
---|
199 | (Windows and Unix). This option is used to set the timeout for blocking |
---|
200 | read operations. It specifies the maximum interval between the |
---|
201 | reception of two bytes in milliseconds. |
---|
202 | For Unix systems the granularity is 100 milliseconds. |
---|
203 | The \fB\-timeout\fR option does not affect write operations or |
---|
204 | nonblocking reads. |
---|
205 | This option cannot be queried. |
---|
206 | .TP |
---|
207 | \fB\-ttycontrol\fR \fI{signal boolean signal boolean ...}\fR |
---|
208 | (Windows and Unix). This option is used to setup the handshake |
---|
209 | output lines (see below) permanently or to send a BREAK over the serial line. |
---|
210 | The \fIsignal\fR names are case-independent. |
---|
211 | \fB{RTS 1 DTR 0}\fR sets the RTS output to high and the DTR output to low. |
---|
212 | The BREAK condition (see below) is enabled and disabled with \fB{BREAK 1}\fR and |
---|
213 | \fB{BREAK 0}\fR respectively. |
---|
214 | It is not a good idea to change the \fBRTS\fR (or \fBDTR\fR) signal |
---|
215 | with active hardware handshake \fBrtscts\fR (or \fBdtrdsr\fR). |
---|
216 | The result is unpredictable. |
---|
217 | The \fB\-ttycontrol\fR option cannot be queried. |
---|
218 | .TP |
---|
219 | \fB\-ttystatus\fR |
---|
220 | (Windows and Unix). The \fB\-ttystatus\fR option can only be |
---|
221 | queried. It returns the current modem status and handshake input signals |
---|
222 | (see below). |
---|
223 | The result is a list of signal,value pairs with a fixed order, |
---|
224 | e.g. \fB{CTS 1 DSR 0 RING 1 DCD 0}\fR. |
---|
225 | The \fIsignal\fR names are returned upper case. |
---|
226 | .TP |
---|
227 | \fB\-xchar\fR \fI{xonChar xoffChar}\fR |
---|
228 | (Windows and Unix). This option is used to query or change the software |
---|
229 | handshake characters. Normally the operating system default should be |
---|
230 | DC1 (0x11) and DC3 (0x13) representing the ASCII standard |
---|
231 | XON and XOFF characters. |
---|
232 | .TP |
---|
233 | \fB\-pollinterval\fR \fImsec\fR |
---|
234 | (Windows only). This option is used to set the maximum time between |
---|
235 | polling for fileevents. |
---|
236 | This affects the time interval between checking for events throughout the Tcl |
---|
237 | interpreter (the smallest value always wins). Use this option only if |
---|
238 | you want to poll the serial port more or less often than 10 msec |
---|
239 | (the default). |
---|
240 | .TP |
---|
241 | \fB\-sysbuffer\fR \fIinSize\fR |
---|
242 | .TP |
---|
243 | \fB\-sysbuffer\fR \fI{inSize outSize}\fR |
---|
244 | (Windows only). This option is used to change the size of Windows |
---|
245 | system buffers for a serial channel. Especially at higher communication |
---|
246 | rates the default input buffer size of 4096 bytes can overrun |
---|
247 | for latent systems. The first form specifies the input buffer size, |
---|
248 | in the second form both input and output buffers are defined. |
---|
249 | .TP |
---|
250 | \fB\-lasterror\fR |
---|
251 | (Windows only). This option is query only. |
---|
252 | In case of a serial communication error, \fBread\fR or \fBputs\fR |
---|
253 | returns a general Tcl file I/O error. |
---|
254 | \fBfconfigure -lasterror\fR can be called to get a list of error details. |
---|
255 | See below for an explanation of the various error codes. |
---|
256 | .SH "SERIAL PORT SIGNALS" |
---|
257 | .PP |
---|
258 | RS-232 is the most commonly used standard electrical interface for serial |
---|
259 | communications. A negative voltage (-3V..-12V) define a mark (on=1) bit and |
---|
260 | a positive voltage (+3..+12V) define a space (off=0) bit (RS-232C). The |
---|
261 | following signals are specified for incoming and outgoing data, status |
---|
262 | lines and handshaking. Here we are using the terms \fIworkstation\fR for |
---|
263 | your computer and \fImodem\fR for the external device, because some signal |
---|
264 | names (DCD, RI) come from modems. Of course your external device may use |
---|
265 | these signal lines for other purposes. |
---|
266 | .IP \fBTXD(output)\fR |
---|
267 | \fBTransmitted Data:\fR Outgoing serial data. |
---|
268 | .IP \fBRXD(input)\fR |
---|
269 | \fBReceived Data:\fRIncoming serial data. |
---|
270 | .IP \fBRTS(output)\fR |
---|
271 | \fBRequest To Send:\fR This hardware handshake line informs the modem that |
---|
272 | your workstation is ready to receive data. Your workstation may |
---|
273 | automatically reset this signal to indicate that the input buffer is full. |
---|
274 | .IP \fBCTS(input)\fR |
---|
275 | \fBClear To Send:\fR The complement to RTS. Indicates that the modem is |
---|
276 | ready to receive data. |
---|
277 | .IP \fBDTR(output)\fR |
---|
278 | \fBData Terminal Ready:\fR This signal tells the modem that the workstation |
---|
279 | is ready to establish a link. DTR is often enabled automatically whenever a |
---|
280 | serial port is opened. |
---|
281 | .IP \fBDSR(input)\fR |
---|
282 | \fBData Set Ready:\fR The complement to DTR. Tells the workstation that the |
---|
283 | modem is ready to establish a link. |
---|
284 | .IP \fBDCD(input)\fR |
---|
285 | \fBData Carrier Detect:\fR This line becomes active when a modem detects a |
---|
286 | .QW Carrier |
---|
287 | signal. |
---|
288 | .IP \fBRI(input)\fR |
---|
289 | \fBRing Indicator:\fR Goes active when the modem detects an incoming call. |
---|
290 | .IP \fBBREAK\fR |
---|
291 | A BREAK condition is not a hardware signal line, but a logical zero on the |
---|
292 | TXD or RXD lines for a long period of time, usually 250 to 500 |
---|
293 | milliseconds. Normally a receive or transmit data signal stays at the mark |
---|
294 | (on=1) voltage until the next character is transferred. A BREAK is sometimes |
---|
295 | used to reset the communications line or change the operating mode of |
---|
296 | communications hardware. |
---|
297 | .SH "ERROR CODES (Windows only)" |
---|
298 | .PP |
---|
299 | A lot of different errors may occur during serial read operations or during |
---|
300 | event polling in background. The external device may have been switched |
---|
301 | off, the data lines may be noisy, system buffers may overrun or your mode |
---|
302 | settings may be wrong. That is why a reliable software should always |
---|
303 | \fBcatch\fR serial read operations. In cases of an error Tcl returns a |
---|
304 | general file I/O error. Then \fBfconfigure -lasterror\fR may help to |
---|
305 | locate the problem. The following error codes may be returned. |
---|
306 | .TP 10 |
---|
307 | \fBRXOVER\fR |
---|
308 | Windows input buffer overrun. The data comes faster than your scripts reads |
---|
309 | it or your system is overloaded. Use \fBfconfigure -sysbuffer\fR to avoid a |
---|
310 | temporary bottleneck and/or make your script faster. |
---|
311 | .TP 10 |
---|
312 | \fBTXFULL\fR |
---|
313 | Windows output buffer overrun. Complement to RXOVER. This error should |
---|
314 | practically not happen, because Tcl cares about the output buffer status. |
---|
315 | .TP 10 |
---|
316 | \fBOVERRUN\fR |
---|
317 | UART buffer overrun (hardware) with data lost. |
---|
318 | The data comes faster than the system driver receives it. |
---|
319 | Check your advanced serial port settings to enable the FIFO (16550) buffer |
---|
320 | and/or setup a lower(1) interrupt threshold value. |
---|
321 | .TP 10 |
---|
322 | \fBRXPARITY\fR |
---|
323 | A parity error has been detected by your UART. |
---|
324 | Wrong parity settings with \fBfconfigure -mode\fR or a noisy data line (RXD) |
---|
325 | may cause this error. |
---|
326 | .TP 10 |
---|
327 | \fBFRAME\fR |
---|
328 | A stop-bit error has been detected by your UART. |
---|
329 | Wrong mode settings with \fBfconfigure -mode\fR or a noisy data line (RXD) |
---|
330 | may cause this error. |
---|
331 | .TP 10 |
---|
332 | \fBBREAK\fR |
---|
333 | A BREAK condition has been detected by your UART (see above). |
---|
334 | .SH "PORTABILITY ISSUES" |
---|
335 | .TP |
---|
336 | \fBWindows \fR(all versions) |
---|
337 | Valid values for \fIfileName\fR to open a serial port are of the form |
---|
338 | \fBcom\fIX\fB:\fR, where \fIX\fR is a number, generally from 1 to 4. |
---|
339 | This notation only works for serial ports from 1 to 9, if the system |
---|
340 | happens to have more than four. An attempt to open a serial port that |
---|
341 | does not exist or has a number greater than 9 will fail. An alternate |
---|
342 | form of opening serial ports is to use the filename \fB\e\e.\ecomX\fR, |
---|
343 | where X is any number that corresponds to a serial port; please note |
---|
344 | that this method is considerably slower on Windows 95 and Windows 98. |
---|
345 | .TP |
---|
346 | \fBWindows NT\fR |
---|
347 | When running Tcl interactively, there may be some strange interactions |
---|
348 | between the real console, if one is present, and a command pipeline that uses |
---|
349 | standard input or output. If a command pipeline is opened for reading, some |
---|
350 | of the lines entered at the console will be sent to the command pipeline and |
---|
351 | some will be sent to the Tcl evaluator. If a command pipeline is opened for |
---|
352 | writing, keystrokes entered into the console are not visible until the |
---|
353 | pipe is closed. This behavior occurs whether the command pipeline is |
---|
354 | executing 16-bit or 32-bit applications. These problems only occur because |
---|
355 | both Tcl and the child application are competing for the console at |
---|
356 | the same time. If the command pipeline is started from a script, so that Tcl |
---|
357 | is not accessing the console, or if the command pipeline does not use |
---|
358 | standard input or output, but is redirected from or to a file, then the |
---|
359 | above problems do not occur. |
---|
360 | .TP |
---|
361 | \fBWindows 95\fR |
---|
362 | A command pipeline that executes a 16-bit DOS application cannot be opened |
---|
363 | for both reading and writing, since 16-bit DOS applications that receive |
---|
364 | standard input from a pipe and send standard output to a pipe run |
---|
365 | synchronously. Command pipelines that do not execute 16-bit DOS |
---|
366 | applications run asynchronously and can be opened for both reading and |
---|
367 | writing. |
---|
368 | .RS |
---|
369 | .PP |
---|
370 | When running Tcl interactively, there may be some strange interactions |
---|
371 | between the real console, if one is present, and a command pipeline that uses |
---|
372 | standard input or output. If a command pipeline is opened for reading from |
---|
373 | a 32-bit application, some of the keystrokes entered at the console will be |
---|
374 | sent to the command pipeline and some will be sent to the Tcl evaluator. If |
---|
375 | a command pipeline is opened for writing to a 32-bit application, no output |
---|
376 | is visible on the console until the pipe is closed. These problems only |
---|
377 | occur because both Tcl and the child application are competing for the |
---|
378 | console at the same time. If the command pipeline is started from a script, |
---|
379 | so that Tcl is not accessing the console, or if the command pipeline does |
---|
380 | not use standard input or output, but is redirected from or to a file, then |
---|
381 | the above problems do not occur. |
---|
382 | .PP |
---|
383 | Whether or not Tcl is running interactively, if a command pipeline is opened |
---|
384 | for reading from a 16-bit DOS application, the call to \fBopen\fR will not |
---|
385 | return until end-of-file has been received from the command pipeline's |
---|
386 | standard output. If a command pipeline is opened for writing to a 16-bit DOS |
---|
387 | application, no data will be sent to the command pipeline's standard output |
---|
388 | until the pipe is actually closed. This problem occurs because 16-bit DOS |
---|
389 | applications are run synchronously, as described above. |
---|
390 | .RE |
---|
391 | .TP |
---|
392 | \fBUnix\fR\0\0\0\0\0\0\0 |
---|
393 | Valid values for \fIfileName\fR to open a serial port are generally of the |
---|
394 | form \fB/dev/tty\fIX\fR, where \fIX\fR is \fBa\fR or \fBb\fR, but the name |
---|
395 | of any pseudo-file that maps to a serial port may be used. |
---|
396 | Advanced configuration options are only supported for serial ports |
---|
397 | when Tcl is built to use the POSIX serial interface. |
---|
398 | .RS |
---|
399 | .PP |
---|
400 | When running Tcl interactively, there may be some strange interactions |
---|
401 | between the console, if one is present, and a command pipeline that uses |
---|
402 | standard input. If a command pipeline is opened for reading, some |
---|
403 | of the lines entered at the console will be sent to the command pipeline and |
---|
404 | some will be sent to the Tcl evaluator. This problem only occurs because |
---|
405 | both Tcl and the child application are competing for the console at the |
---|
406 | same time. If the command pipeline is started from a script, so that Tcl is |
---|
407 | not accessing the console, or if the command pipeline does not use standard |
---|
408 | input, but is redirected from a file, then the above problem does not occur. |
---|
409 | .RE |
---|
410 | .PP |
---|
411 | See the \fBPORTABILITY ISSUES\fR section of the \fBexec\fR command for |
---|
412 | additional information not specific to command pipelines about executing |
---|
413 | applications on the various platforms |
---|
414 | .SH "EXAMPLE" |
---|
415 | Open a command pipeline and catch any errors: |
---|
416 | .CS |
---|
417 | set fl [\fBopen\fR "| ls this_file_does_not_exist"] |
---|
418 | set data [read $fl] |
---|
419 | if {[catch {close $fl} err]} { |
---|
420 | puts "ls command failed: $err" |
---|
421 | } |
---|
422 | .CE |
---|
423 | .SH "SEE ALSO" |
---|
424 | file(n), close(n), filename(n), fconfigure(n), gets(n), read(n), |
---|
425 | puts(n), exec(n), pid(n), fopen(3) |
---|
426 | .SH KEYWORDS |
---|
427 | access mode, append, create, file, non-blocking, open, permissions, |
---|
428 | pipeline, process, serial |
---|