# Opening a file in c

A file must be opened before any I/O operation can be performed on that file .

The process of establishing a connection between the program and the file is called opening the file

A structure named FILE Is defined in the file stdio.h that contains all information about the file like name , status , buffer size , current position , end of file status etc .

(adsbygoogle = window.adsbygoogle || []).push({});

All these details are hidden from the programmer and the operating system takes care of all these things.

typedef  struct {
………….
……………
} FILE;
1
2
3
4

A file pointer is a pointer to a structure of type FILE . Whenever a file is opened , a structure of type FILE is associated with it , and a file pointer that points to this structure identifies this file .

The function fopen() is used to open a file Declaration

FILE *fopen (const char *filename , const char *mode);
1

fopen() function takes two string as arguments , the first one is the name of the file to be opened and the second one is the mode that describes which operations ( read , write , append etc) are to be performed on the file .

On success , fopen() returns a pointer of type FILE and on error it returns NULL .

The return value of fopen() is assigned to the pointer declared previously .

For example

FILE *fp1 ,*fp2 ;
Fp1 = fopen(“myfile.txt”,”w”);
Fp2 = fopen(“myfile.dat”,”r”);
1
2
3

The name of the file is limited to FILENAME_MAX characters .

After opening the file with fopen() , the name of file is not used in the program for any operation on it .

whenever we have to performed any operation on the file we will use pointer returned by fopen() function .

so the original name is called external name but the file pointer associated with it is called internal name.

The second argument represent the mode in which file is opened .

# Modes

# “w”(write)

If the file does not exit then this mode create a new file and if the file is already exist then previous data is erased and new data entered is written to the file

# “a”(append)

If the file does not exit then this mode create a new file and if the file is already exist then new data is appended at the end of file . In this mode , the data existing in the file is not erased as in previous mode.

# “r”(read)

This mode is used to read existing data in the file . File must exist for this operation and data is not erased

# “w+”(write+read)

This mode is similar to the write mode but here we can also read and modify the data . If the file does not exit then this mode create a new file and if the file is already exist then previous data is erased and new data entered is written to the file

# “r+”(read+write)

This mode is similar to the read mode but here we can also write and modify the data .File must exist for this operation and data is not erased . Since we can add new data and modify existing data so this mode is also called update mode.

# “a+”(append+read)

This mode is similar to the append mode but here we can also read the data stored in the file . If the file does not exit then this mode create a new file and if the file is already exist then new data is appended at the end of file . In this mode , the data existing in the file is not erased as in previous mode.

(adsbygoogle = window.adsbygoogle || []).push({});

To open a file in binary mode we can append ‘b’ to the mode , and to open the file in text mode ‘t’ can be appended to the mode .

But since text mode is the default mode , ‘t’ is generally omitted while opening files in text mode . For example-

“wb” - Binary file opened in write mode

“ab+” or “a+b” - Binary file opened in append mode
1
2
3

# Errors in Opening Files

If an error occurs in opening the file , than fopen() return null . So we can check for any errors in opening by checking the return value of fopen() .

FILE *fp ;
fp = fopen(“myfile.dat”,”w”);
if (fp == NULL)
{
printf(“error in opening file”);
exit(1);

}
1
2
3
4
5
6
7
8

Errors in opening a file may occur due to various reasons , for example-

  1. If we try to open a file in a read or update mode , and the file does not exist or we do not have read permission on that file

  2. If we try to create a file and there is no space on the disk , then we do not have write permission

  3. Operating system limit the number of file that can be opened at a time and we are trying to open more file than that limit Alert

We can give full pathname to open a file . Suppose we want to open a file DOS whose path is ”f:\file\myfile.dat” , then we have to write as –

fp = fopen(”f:\\file\\myfile.dat”, “r”);
1

Here we have used double backslash inside string is considered as an escape character , ‘\f’ and ‘\m’ are regarded as escape sequence if we use single backslash . In Unix , a single forward slash can be used

Never give the mode single quotes , since it is string not a character constant

fopen(”f:\\file\\myfile.dat”, ‘r’);  //ERROR
1