fd_open

fd_open — opens a file or device and assigns it a file descriptor.

Syntax

fd_open (name, mode)

		

Arguments

name

The name of a file, as a string.

mode

The mode for opening the file.

Returns

A non-negative integer representing the lowest numbered unused file descriptor if successful. If an error occurs, the function returns -1 and sets the errno.

Description

This function opens a file for reading and/or writing, and assigns it a file descriptor which is used as an argument by other functions such as fd_read and fd_write. The file that is opened could be a regular file, a directory, or a block or character device. Legal mode values are:

    O_RDONLY Read-only mode

    O_WRONLY Write-only mode

    O_RDWR Read-Write mode

Any combination of the following flags may be bitwise OR-ed with the open mode to modify how the file is accessed:

    O_APPEND Append (writes guaranteed at the end)

    O_CREAT Opens with file create

    O_EXCL Exclusive open

    O_NOCTTY Don't assign a controlling terminal

    O_NONBLOCK Non-blocking I/O

    O_TRUNC Open with truncation

    O_DSYNC Data integrity synch

    O_SYNC File integrity synch

    O_TEMP Temporary file, don't put to disk

    O_CACHE Cache sequential files too

If an error occurs -1 is returned and errno is set to one of the following:

    EACCES Search permission denied on a portion of the path prefix, or the file exists and the permissions required to open the file in the given mode so not exist.

    EBADFSYS The file or the path prefix to the file was found to be corrupted

    EBUSY The file is already open for writing.

    EEXIST O_CREAT and O_EXCL are set and the named file exists

    EINTR The function was interrupted by a signal

    EISDIR The named file is a directory

    EMFILE Too many file descriptors are currently in use by this process

    ENAMETOOLONG The length of the path to the file is too long.

    ENFILE Too many files are currently open on the system

    ENOENT O_CREAT is not set and the file does not exist

    ENOSPC The directory or file system which would create the new file cannot be extended

    ENOTDIR A component of the path to the file is not a directory

    ENXIO O_NONBLOCK is set, the file is a FIFO, O_WRONLY is set, and no process has the file open for reading

    EROFS The named file resides on a read-only file system.

Example

Gamma> require_lisp("const/filesys");
"/usr/cogent/lib/const/filesys.lsp"
Gamma> ptr = fd_open("/fd/ttyp8",O_WRONLY);
4
Gamma> fd_write(ptr,"\nhello\n");
7
		

See Also

fd_close, fd_data_function, fd_eof_function, fd_read, fd_write ser_setup, Referencing Files