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