c programming session 14
TRANSCRIPT
Slide 1 of 22Ver. 1.0
Programming in CObjectives
In this session, you will learn to:Differentiate between high-level and low-level input/outputWork with low-level input/output functionsUse random access in files
Slide 2 of 22Ver. 1.0
Programming in CDifferentiating Between High-Level and Low-Level Input/Output
In C, files and devices can be accessed by using two groups of functions:
High-level I/O or stream-level I/OLow-level I/O
Slide 3 of 22Ver. 1.0
Programming in CDifference Between High-level I/O and Low-level I/O
High-level or Stream-level I/O:Is more flexible and convenient.Hides complexity from the programmer.Is slower.
Low-level I/O:Provides direct access to files and devices.Is complex (buffer management is to be done by the programmer).Is faster.Uses a file descriptor to track the status of the file.
Slide 4 of 22Ver. 1.0
Programming in CPractice: 8.1
Which of the following statements is true?In C, there are many interfaces between a program and peripheral devices.A file descriptor is a non-negative integer.When you perform an operation on a file, the system uses the name of the file to identify it.
Slide 5 of 22Ver. 1.0
Programming in CPractice: 8.1 (Contd.)
Solution:A file descriptor is a non-negative integer.
Slide 6 of 22Ver. 1.0
Programming in C
Low-level I/O functions are used for:Accessing files and devices directly.Reading binary files in large chunks.Performing I/O operations quickly and efficiently.
Uses of Low-Level Input/Output
Slide 7 of 22Ver. 1.0
Programming in C
The low-level I/O system in C provides functions that can be used to access files and devices. The basic low-level I/O functions are:
open()close()read()write()
Working with Low-Level Input/Output Functions
Slide 8 of 22Ver. 1.0
Programming in C
The open() function:Is used to open an existing file or create a new file.Returns a file descriptor for the file name passed to it.Has the following syntax:
int open(char *filename, int flags, int perms );
The open() Function
Slide 9 of 22Ver. 1.0
Programming in C
The close() function:Closes the file that was opened using the open() function.Takes the file descriptor as a parameter to close the file.Returns 0 on success and -1 in case of an error.Has the following syntax:
int close(int filedes);
The close() Function
Slide 10 of 22Ver. 1.0
Programming in C
The read() function:Reads data from a file. Starts reading a file from the current file position.Has the following syntax:int read (int filedes, char *buffer, int size);
The read() function
Slide 11 of 22Ver. 1.0
Programming in C
The write() function:Enables a user to write contents to a file. Has the following syntax: int write (int filedes, char *buffer, int size);
The write() function
Slide 12 of 22Ver. 1.0
Programming in CPractice: 8.2
1. Which of the following statements is true?a. At end-of-file, if a function is called repeatedly, it will give error.b. In a read() function, the value of zero indicates end-of-file.
2. What will happen if you do not call the write() function in a loop?
Slide 13 of 22Ver. 1.0
Programming in C
Solution:1. In a read() function, the value of zero indicates end-of-file.2. If you do not call write() function in a loop then the entire
data would not be written.
Practice: 8.2 (Contd.)
Slide 14 of 22Ver. 1.0
Programming in C
Error Handling:Some of the low-level I/O functions return error flags when they fail to perform a specified task. You can find these types of errors using a variable, errno. The following table lists some values of errno that are common to the open(), close(), read(), and write() functions.
Error Handling
errno values Description
EACCES Specifies that the program has failed to access one of the directories in the file.
ENAMETOOLONG Indicates that the file name is too long.
ENOSPC Specifies that the disc is out of space and the file can not be created.
EIO Specifies that there was a hardware error.
EBADF Specifies that the file descriptor passed to read, write, or close the file is invalid.
Slide 15 of 22Ver. 1.0
Programming in C
There are certain errno values that are specific to the open() function, which are shown with the help of the following table.
errno values Description
EEXIST Specifies that if File already exists, and O_CREAT and O_EXCL are set, then opening the file would conflict with the existing file and the file will not open.
EISDIR Specifies that the file is actually a directory.
ENOENT Specifies that some of the file components do not exist.
EMFILE Specifies that too many files are open.
EROFS Specifies that the file is on a read only systembut either one of the write permissions O_WRONLY, O_RDWR, or O_TRUNC is set.
Error Handling (Contd.)
Slide 16 of 22Ver. 1.0
Programming in C
There are certain errno values that are specific to the write() function, which are shown with the help of the following table.
errno values Description
EFBIG Specifies that the file will become too large if the data is written on it.
EINTR Specifies that the write operation is temporarily interrupted.
Error Handling (Contd.)
Slide 17 of 22Ver. 1.0
Programming in C
The read and write operations on files are usually sequential in nature. Random access permits non-sequential file access so that a file can be read or written out of sequence. Random access in low-level file routines is performed using the lseek() function.
Using Random Access Seek in Files
Slide 18 of 22Ver. 1.0
Programming in C
The lseek() function:Returns the file position, as measured in bytes from the beginning of the file.Has the following syntax:
long lseek (int filedes, long offset, int origin);
The lseek() Function
Slide 19 of 22Ver. 1.0
Programming in C
The following table lists the various values of the third parameter (origin).
The lseek() Function (Contd.)
Values for origin Description
SEEK_SET or 0 Specifies that the offset is relative to the beginning of the file. The offset can only be positive.
SEEK_CUR or 1 Specifies that the offset is relative to the current position. The offset can be positive or negative.
SEEK_END or 2 Specifies that the offset is relative to the end of the file. The offset can be positive or negative.
Slide 20 of 22Ver. 1.0
Programming in C
The following table lists some instructions for moving to the end or beginning of a file.
The lseek() Function (Contd.)
Instruction Function used
To get to the end of a file lseek(filedes,0,2);
To return to the beginning of a file lseek(filedes,0,0);
Slide 21 of 22Ver. 1.0
Programming in CSummary
In this session, you learned that:In C, files and devices can be accessed by using high-level I/O or stream-level I/O and low-level I/O.Low-level I/O functions are those, which provide direct access to files and peripheral devices.A file descriptor is a non-negative integer, which is returned by the open() function and is used in read() and write() functions. It tells about the permission to access the file.Low-level input/output functions are used for the following purposes:
Accessing files and devices directlyReading the binary files in large chunksPerforming I/O operations quickly and efficiently
The open() function is used to open or create a file.
Slide 22 of 22Ver. 1.0
Programming in CSummary (Contd.)
The close() function is used for closing the file.The read() function reads the existing file up to specified size and stores it into a character array.The write() function writes on the file taking input from a character array up to specified size.Most of the low-level I/O functions throw errors during file handling.errno is the variable that tells about the error occurred during a low-level I/O operation.Files and devices can also be accessed randomly.The lseek() function is used to place the file position to the desired place.The lseek() function do not require to read or write the file for positioning it.