Create and open a file (low-level)
Synopsis:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int creat( const char* path,
mode_t mode );
int creat64( const char* path,
mode_t mode );
Arguments:
- path
- The path of the file you want to open.
- mode
- The access permissions that you want to use.
For more information, see the entry for
struct stat.
Library:
libc
Use the -l c option to
qcc
to link against this library.
This library is usually included automatically.
Description:
The creat() function creates and opens the file specified by
path with the given mode.
The creat64() function is a large-file support version of creat().
Note:
In QNX Neutrino 6.6 or later, the large-file support functions and data types
appear in the name space only if you define
_LARGEFILE64_SOURCE when you compile your code.
For more information, see
Classification
in What's in a Function Description?
Calling creat() is the same as:
open( path, O_WRONLY | O_CREAT | O_TRUNC, mode );
Similarly, calling creat64() is the same as:
open64( path, O_WRONLY | O_CREAT | O_TRUNC | O_LARGEFILE, mode );
If path exists and is writable, it's truncated to
contain no data, and the existing mode setting isn't changed.
If path doesn't exist, it's created with the access permissions
specified by the mode argument.
The access permissions for the file or directory are specified as a
combination of the bits defined in <sys/stat.h>.
Returns:
A file descriptor on success, or -1 if an error occurs
(errno is set).
Errors:
- EACCES
- Indicates one of the following permission problems:
- Search permission is denied for one of the components in the path.
- The file specified by path exists, and the permissions specified by
mode are denied.
- The file specified by path doesn't exist, and the file couldn't be
created because write permission is denied for the parent directory.
- EBADFSYS
- While attempting to open path, the file itself or a
component of its path prefix was found to be corrupted.
A system failure—from which no automatic recovery is possible—occurred while
the file was being written to or while the directory was being updated.
The filesystem must be repaired before proceeding.
- EBUSY
- The file specified by path is a block special device
that's already open for writing, or path
names a file on a filesystem mounted on a block special
device that is already open for writing.
- EINTR
- The call to creat() was interrupted by a signal.
- EISDIR
- The file specified by path is a directory and the file creation flags
specify write-only or read/write access.
- ELOOP
- Too many levels of symbolic links.
- EMFILE
- All file descriptors available to the process are currently open.
- ENAMETOOLONG
- The length of path exceeds PATH_MAX, or a
pathname component is longer than NAME_MAX.
- ENFILE
- Too many files are currently open in the system.
- ENOENT
- Either the path prefix doesn't exist, or the path argument points to an empty string.
- ENOSPC
- In the directory or filesystem that would contain the new file, there's not enough space available to create a new file
or the maximum limit of files has been reached.
- ENOSYS
- The creat() function isn't implemented for the filesystem specified
by path.
- ENOTDIR
- A component of the path prefix isn't a directory.
- EROFS
- The file specified by path resides on a read-only filesystem.
- ETXTBSY
- The file is a pure procedure (shared text) file that's currently being executed.
Examples:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main( void )
{
int filedes;
filedes = creat( "file",
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP );
if( filedes != -1 ) {
/* process file */
close( filedes );
return EXIT_SUCCESS;
}
return EXIT_FAILURE;
}
Classification:
creat() is
POSIX 1003.1;
creat64() is Large-file support
Safety: |
|
Cancellation point |
Yes |
Interrupt handler |
No |
Signal handler |
Yes |
Thread |
Yes |