Creates a new file.
#include <fcntl.h> int creat (const char *file_spec, mode_t mode); (ISO POSIX-1) int creat (const char *file_spec, mode_t mode, . . . ); (DEC C Extension)
You can construct modes by using the bitwise OR operator (|) to create mode combinations. The modes are as follows:
0400 | OWNER:READ |
0200 | OWNER:WRITE |
0100 | OWNER:EXECUTE |
0040 | GROUP:READ |
0020 | GROUP:WRITE |
0010 | GROUP:EXECUTE |
0004 | WORLD:READ |
0002 | WORLD:WRITE |
0001 | WORLD:EXECUTE |
The system is given the same privileges as the owner. A WRITE privilege implies a DELETE privilege.
"keyword = value", . . . ,"keyword = value"
Or in the case of "acc" or "err", this form:
"keyword"
Here, keyword is an RMS field in the file access block (FAB) or record access block (RAB); value is valid for assignment to that field. Some fields permit you to specify more than one value. In these cases, the values are separated by commas.
The RMS callback keywords "acc" and "err" are the only keywords that do not take values. Instead, they are followed by a pointer to the callback routine to be used, followed by a pointer to a user- specified value to be used as the first argument of the callback routine. For example, to set up an access callback routine called acc_callback whose first argument is a pointer to the integer variable first_arg in a call to open, you can use the following statement:
open("file.dat", O_RDONLY, 0 ,"acc", acc_callback, &first_arg)
The second and third arguments to the callback routine must be pointers to a FAB and RAB, respectively, and the routine must have a return type of int. If the callback retruns a value less than 0, the open, creat, or fopen fails. The error callback can correct the error condition and return a status greater than or equal to 0 to continue the creat call. Assuming the previous open statement, the function prototype for acc_callback would be similar to the following statement:
#include <rms.h> int acc_callback(int *first_arg, struct FAB *fab, struct RAB *rab);
FAB and RAB are defined in the <rms.h> header file, and the actual pointers passed to the routine are pointers to the RAB and FAB being used to open the file file.dat.
If an access callback routine is established, then it will be called in the open-type routine immediately before the call to the RMS function sys$create or sys$open. If an error callback routine is established and an error status is returned from the sys$create or sys$open function, then the callback routine will be invoked immediately after the status is checked and the error value is discovered.
Table 5 describes the RMS keywords and values.
Keyword | Value | Description |
---|---|---|
"acc" | callback | Access callback routine. |
"alq = n" | decimal | Allocation quantity. |
"bls = n" | decimal | Block size. |
"ctx = bin" | string | No translation of '\n' to the terminal. Use this for writing binary data to files. |
"ctx=cvt" | string | Negates a previous setting of "ctx=nocvt". This is the default. |
"ctx = nocvt" | string | No conversion of Fortran carriage-control bytes. |
"ctx = rec" | string | Force record mode access. |
"ctx = stm" | string | Force stream mode access. |
"ctx=xplct" | string | Causes records to be written only when explicitly specified by a call to fflush, close, or fclose. |
"deq = n" | decimal | Default extension quantity. |
"dna = filespec" | string | Default file-name string. |
"err" | callback | Error callback routine. |
"fop = val, val , . . . " | File-processing options: | |
ctg cbt dfw dlt tef cif sup scf spl tmd tmp nef rck wck mxv rwo pos rwc sqo | Contiguous. Contiguous-best-try. Deferred write; only applicable to files opened for shared access. Delete file on close. Truncate at end-of-file. Create if nonexistent. Supersede. Submit as command file on close. Spool to system printer on close. Temporary delete. Temporary (no file directory). Not end-of-file. Read check compare operation. Write check compare operation. Maximize version number. Rewind file on open. Current position. Rewind file on close. File can only be processed in a sequential manner. | |
"fsz = n" | decimal | Fixed header size. |
"gbc = n" | decimal | The requested number of global buffers for a file. |
"mbc = n" | decimal | Multiblock count. |
"mbf = n" | decimal | Multibuffer count. |
"mrs = n" | decimal | Maximum record size. |
"pmt=usr-prmpt" | string | Prompts for terminal input. Any RMS input from a terminal device will be preceded by "usr-prmpt" when this option and "rop=pmt" are specified. |
"rat = val, val . . . " | Record attributes: | |
cr blk ftn none prn | Carriage-return control. Disallow records to span block boundaries. FORTRAN print control. Explicitly forces no carriage control. Print file format. | |
"rfm = val" | Record format: | |
fix stm stmlf stmcr var vfc udf | Fixed-length record format. RMS stream record format. Stream format with line-feed terminator. Stream format with carriage-return terminator. Variable-length record format. Variable-length record with fixed control. Undefined. | |
"rop = val, val . . . " | Record-processing operations: | |
asy | Asynchronous I/O. | |
cco | Cancel Ctrl/O (used with Terminal I/O). | |
cvt | Capitalizes characters on a read from the terminal. | |
eof | Positions the record stream to the end-of-file for the connect operation only. | |
nlk | Do not lock record. | |
pmt | Enables use of the prompt specified by "pmt=usr-prmpt" on input from the terminal. | |
pta | Eliminates any information in the type-ahead buffer on a read from the terminal. | |
rea | Locks record for a read operation for this process, while allowing other accessors to read the record. | |
rlk | Locks record for write. | |
rne | Suppresses echoing of input data on the screen as it is entered on the keyboard. | |
rnf | Indicates that Ctrl/U, Ctrl/R, and DELETE are not to be considered control commands on terminal input, but are to be passed to the application program. | |
rrl | Reads regardless of lock. | |
syncsts | Returns success status of RMS$_SYNCH if the requested service completes its task immediately. | |
tmo | Timeout I/O. | |
tpt | Allows put/write services using sequential record access mode to occur at any point in the file, truncating the file at that point. | |
ulk | Prohibits RMS from automatically unlocking records. | |
wat | Wait until record is available, if currently locked by another stream. | |
rah | Read ahead. | |
wbh | Write behind. | |
"rtv=n" | decimal | The number of retrieval pointers that RMS has to maintain in memory (0 to 127,255). |
"shr = val" | File sharing options: | |
del get mse nil put upd upi | Allows users to delete. Allows users to read. Allows mainstream access. Prohibits file sharing. Allows users to write. Allows users to update. Allows one or more writers. | |
"tmo = n" | decimal | I/O timeout value. |
In addition to these options, any option that takes a key value (such as "fop" or "rat") can be negated by prefixing the value with "no". For example, specify "fop=notmp" to clear the "tmp" bit in the "fop" field.
For more information on these options, see the OpenVMS Record Management Services Reference Manual manual.
If the file exists:
If the file did not previously exist:
See also open, close, read, write, and lseek in this section.
n | A file descriptor. |
-1 | Indicates errors, including protection violations, undefined directories, and conflicting file attributes. |