Files that are organized as a sequence of data are called regular files. Regular files can contain ASCII text, text in some other binary data encoding, executable code, or any combination of text, data, and code.
A regular file is made up of the following components:
Control data, which is called the inode. This data includes the file type, the access permissions, the owner, the file size, and the location of the data blocks.
File contents is a non-terminated sequence of bytes.
The Oracle Solaris OS provides the following basic forms of file I/O interfaces:
The basic file I/O interfaces are described in Basic File I/O.
The standard I/O buffering provides an easier interface and improved efficiency to run an application on a system without virtual memory. In an application running in a virtual memory environment, such as Oracle Solaris, standard file I/O is outdated.
The memory mapping interface is described in Memory Management Interfaces. Mapping files is the efficient form of the file I/O for applications running in the Oracle Solaris platform.
The following interfaces perform basic operations on files and on character I/O devices.
|
The following code sample demonstrates the use of the basic file I/O interface.
Example 17 Using the Basic File I/O Interface#include <fcntl.h> #define MAXSIZE 256 main() { int fd; ssize_t n; char array[MAXSIZE]; fd = open ("/etc/motd", O_RDONLY); if (fd == -1) { perror ("open"); exit (1); } while ((n = read (fd, array, MAXSIZE)) > 0) if (write (1, array, n) != n) perror ("write"); if (n == -1) perror ("read"); close (fd); }
In this example, the read and the write interfaces both transfer the specified number of bytes, starting at the current offset into the file. The number of bytes transferred is returned. The end of a file is indicated on a read by a return value of zero. For more information, see the read(2) and write(2) man pages.
When you are done reading or writing a file, call the close interface. Do not call close for a file descriptor that was not returned from a call to open. For more information, see the close(2), and open(2) man pages.
File pointer offsets into an open file are changed by using read, write, or by calls to lseek. For more information, see the read(2), write(2) and lseek(2) man pages.
The following example demonstrates the uses of lseek.
off_t start, n; struct record rec; /* record current offset in start */ start = lseek (fd, 0L, SEEK_CUR); /* go back to start */ n = lseek (fd, -start, SEEK_SET); read (fd, &rec, sizeof (rec)); /* rewrite previous record */ n = lseek (fd, -sizeof (rec), SEEK_CUR); write (fd, (char *&rec, sizeof (rec));
The following table lists the tasks performed by advanced file I/O interfaces.
|
For more information, see syscall Provider in Oracle Solaris 11.3 DTrace (Dynamic Tracing) Guide.
The following table lists the file system control interfaces that control the various aspects of the file system.
|