c programming session 14

22
Slide 1 of 22 Ver. 1.0 Programming in C Objectives In this session, you will learn to: Differentiate between high-level and low-level input/output Work with low-level input/output functions Use random access in files

Upload: vivek-singh

Post on 16-Apr-2017

330 views

Category:

Education


2 download

TRANSCRIPT

Page 1: C programming session 14

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

Page 2: C programming session 14

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

Page 3: C programming session 14

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.

Page 4: C programming session 14

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.

Page 5: C programming session 14

Slide 5 of 22Ver. 1.0

Programming in CPractice: 8.1 (Contd.)

Solution:A file descriptor is a non-negative integer.

Page 6: C programming session 14

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

Page 7: C programming session 14

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

Page 8: C programming session 14

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

Page 9: C programming session 14

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

Page 10: C programming session 14

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

Page 11: C programming session 14

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

Page 12: C programming session 14

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?

Page 13: C programming session 14

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

Page 14: C programming session 14

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.

Page 15: C programming session 14

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

Page 16: C programming session 14

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

Page 17: C programming session 14

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

Page 18: C programming session 14

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

Page 19: C programming session 14

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.

Page 20: C programming session 14

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

Page 21: C programming session 14

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.

Page 22: C programming session 14

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.