System Interface Guide

Files and I/O

Files that are organized as a sequence of data are called regular files. These can contain ASCII text, text in some other binary data encoding, executable code, or any combination of text, data, and code. The file has two components:

SunOS provides three basic forms of file input/output interfaces.

Basic File I/O

The functions listed in Table 5-1 perform basic operations on files:

Table 5-1 Basic File I/O Functions

Function 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 5-1

#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 close(2) a file when you are done reading or writing it, but never close(2) a file descriptor that you did not open(2).

Offset into an open file are changed by read(2)s, write(2)s, 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 functions create and remove directories and files, create links to existing files, and obtain or modify file status information.

Table 5-2 Advanced File I/O Functions

Function 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

File system control functions let you to control various aspects of the file system:

Table 5-3 File System Control Functions

Function Name 

Purpose 

ustat(2)Get file system statistics 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