Sun Microsystems, Inc.
spacerspacer
spacer www.sun.com docs.sun.com |
spacer
black dot
 
 
  Previous   Contents   Next 
   
 
Chapter 4

Input/Output Interfaces

This chapter introduces file input/output operations, as provided on systems that do not provide virtual memory services. The chapter discusses the improved input/output method provided by the virtual memory facilities and describes in "Using File and Record Locking " the older method of file and record locking.

Files and I/O Interfaces

Files that are organized as a sequence of data are called regular files. They 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, 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: a nonterminated sequence of bytes.

The Solaris operating environment provides the following basic forms of file input/output interfaces:

  • The traditional, raw style of file I/O is described in"Basic File I/O".

  • The standard I/O buffering provides an easier interface and improved efficiency to an application run on a system without virtual memory. In an application running in a virtual memory environment, such as on the SunOS™ operating system, standard file I/O is outdated.

  • The memory mapping interface is described in "Memory Management Interfaces". Mapping files is the most efficient and powerful form of file I/O for most applications run under the SunOS™ platform.

Basic File I/O

The following interfaces perform basic operations on files and on character I/O devices.

Table 4-1 Basic File I/O Interfaces

Interface Name

Purpose

open(2)Open a file for reading or writing 
close(2)Close a file descriptor 
read(2)Read from a file 
write(2)Write to a file 
creat(2)Create a new file or rewrite an existing one 
unlink(2)Remove a directory entry 
lseek(2)Move read/write file pointer 

The following code sample demonstrates the use of the basic file I/O interface. read(2) and write(2) both transfer no more than the specified number of bytes, starting at the current offset into the file. The number of bytes actually transferred is returned. The end of a file is indicated on a read(2) by a return value of zero.


Example 4-1 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);
}

Always call close(2) for a file when you are done reading or writing it. Never call close(2) for a file descriptor that was not returned from a call to open(2).

File pointer offsets into an open file are changed by using read(2), write(2), or by calls to lseek(2). Some examples of using lseek(2) are:

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));

Advanced File I/O

Advanced file I/O interfaces create and remove directories and files, create links to existing files, and obtain or modify file status information, as shown in the following table.

Table 4-2 Advanced File I/O Interfaces

Interface Name

Purpose

link(2)Link to a file 
access(2)Determine accessibility of a file 
mknod(2)Make a special or ordinary file 
chmod(2)Change mode of file 
chown(2), lchown(2), fchown(2)Change owner and group of a file 
utime(2)Set file access and modification times 
stat(2), lstat(2), fstat(2)Get file status 
fcntl(2)Perform file control functions 
ioctl(2)Control device 
fpathconf(2)Get configurable path name variables 
opendir(3C), readdir(3C), closedir(3C)Perform directory operations 
mkdir(2)Make a directory 
readlink(2)Read the value of a symbolic link 
rename(2)Change the name of a file 
rmdir(2)Remove a directory 
symlink(2)Make a symbolic link to a file 

File System Control

The file system control interfaces listed in the following table enable the control of various aspects of the file system.

Table 4-3 File System Control Interfaces

Interface Name

Purpose

ustat(2)Get file system statistics 
sync(2)Update super block 
mount(2)Mount a file system 
statvfs(2), fstatvfs(2)Get file system information 
sysfs(2)Get file system type information 
 
 
 
  Previous   Contents   Next