Pop Seminar
Pop Seminar
Introduction to Files:
Files:
* A file is a collection of data stored on a secondary storage device like hard disk.
* A file is basically used because real life applications involve large amounts of data and in such
situations
* First, it becomes cumbersome and time consuming to handle huge amount of data through
terminals.
* Second, when doing I/O using terminal, the entire data is lost when either the program is
permanent storage (the disks) and read whenever necessary, without destroying the data.
5.6.1 Streams in C
*In C, the standard streams are termed as pre-connected input and output channels between a text
* Therefore, stream is a logical interface to the devices that are connected to the computer.
* Stream is widely used as a logical interface to a file where a file can refer to a disk file, the
computer
* Although files may differ in the form and capabilities, allstreams are the same.
* The three standard streams (figure 16.1) in C languages are- standard input (stdin), standard output
* Standard input (stdin): Standard input is the stream from which the program receives its data.
The program requests transfer of data using the read operation. However, not all programs require
input. Generally, unless redirected, input for a program is expected from the keyboard.
* Standard output (stdout): Standard output is the stream where a program writes its output
data. The program requests data transfer using the write operation. However, not all programs
generate output.
* Standard error (stderr): Standard error is basically an output stream used by programs to
report error messages or diagnostics. It is a stream independent of standard output and can be
redirected separately. No doubt, the standard output and standard error can also be directed to the
same destination.
* A stream is linked to a file using an open operation and disassociated from a file using a close
operation.
* A buffer is nothing but a block of memory that is used for temporary storage of data that has to
* Buffers are needed because disk drives are block oriented devices asthey can operate efficiently
when
data has to be read/ written in blocks of certain size. The size of ideal buffer size is hardware
dependant.
* The buffer acts as an interface between the stream (which is character-oriented) and the disk
* When the program has to write data to the stream, it is saved in the buffer till it is full. Then the
entire
contents of the buffer are written to the disk as a block as shown in figure 16.2.
the buffer. The program reads data from the buffer. The creation and operation of the buffer is
automatically handled by the operating system. However, C provides some functions for buffer
manipulation. The data resides in the buffer until the buffer is flushed or written to a file.
* A text file is a stream of characters that can be sequentially processed by a computer in forward
direction. For this reason a text file is usually opened for only one kind of operation (reading, writing,
*Because text files only process characters, they can only read or write data one character at a time.
* In a text file, each line contains zero or more characters and ends with one or more characters that
specify the end of line. Each line in a text file can have maximum of 255 characters.
* When data is written to a text file, each newline character is converted to a carriage return/line
feed
character. Similarly, when data is read from a text file, each carriage return/ line feed character is
* Another important thing is that when a text file is used, there are actually two representations of
data-
internal or external. For ex, an int value will be represented as 2 or 4 bytes of memory internally but
externally the int value will be represented as a string of characters representing its decimal or
hexadecimal value. To convert internal representation into external, we can use printf and fprintf
functions. Similarly, to convert an external representation into internal scanf and fscanf can be used.
2. Binary Files:
*A binary file is a file which may contain any type of data, encoded in binary form for computer
* Note that in C a byte and a character are equivalent. Therefore, a binary file is also referred to as a
* A binary file does not require any special processing of the data and each byte of data is
* C places no constructs on the file, and it may be read from, or written to, in any manner the
programmer wants.
* Binary files store data in the internal representation format. Therefore, an int value will be stored I
binary form as 2 or byte value. The same format is used to store data in memory as well as in file.
Like
* In a text file, an integer value 123 will be stored as a sequence of three characters- 1, 2 and 3. So
each
character will take 1 byte and therefore, to store the integer value 123 we need 3 bytes. However, in
a
binary file, the int value 123 will be stored in 2 bytes in the binary form. This clearly indicates that
binary files takes less space to store the same piece of data and eliminates conversion between
internal and external representations and are thus more efficient than the text files.
* There can be a number of files on the disk. In order to access a particular file, you must specify the
* This is accomplished by using a file pointer variable that points to a structure FILE (defined in
stdio.h).
* The file pointer will then be used in all subsequent operations in the file.
FILE *file_pointer_name;
FILE *fp;
* An error will be generated if you use the filename to access a file rather than the file pointer
2. Opening a File
* A file must be first opened before data can be read from it or written to it.
* In order to open a file and associate it with a stream, the fopen() function is used.
File Name
* In DOS the file name can have one to eight characters optionally followed by a period and an
* In C, fopen() may contain the path information instead of specifying the filename. The path gives
File Mode:
*Mode conveys to C the type of processing that will be done with the file.
* The different modes in which a file can be opened for processing are given in Table below:
* The fopen() can fail to open the specified file under certain conditions that are listed below:
Ex:
FILE *fp;
fp = fopen("Student.DAT", "r");if(fp==NULL)
} OR
gets(filename);
fp = fopen(filename, "r+");
if(fp==NULL)
* To close an opened file, the fclose() function is used which disconnects a file pointer from a file.
* After the fclose() has disconnected the file pointer from the file, the pointer can be used to access a
* The fclose() function not only closes the file but also flushes all the buffers that are maintained for
that file
* If you do not close a file after using it, the system closes it automatically when the program exits.
However, since there is a limit on the number of files which can be open simultaneously; the
Here, fp is a file pointer which points to the file that has to be closed. The function returns an integer
value
which indicates whether the fclose() was successful or not. A zero is returned if the function was
successful;
* fscanf()
* fgets()
* fgetc()
* fread()
1. fscanf()
* The fscanf() is used to read data from the stream and store them according to the parameter
Ex:
#include<stdio.h>
void main()
FILE *fp;
fp = fopen("Student.DAT", "r");
if(fp==NULL)
printf("\n Enter the name and roll number of the student : ");
printf(“\n NAME : %s \t ROLL NUMBER = %d", name, roll_no); // READ FROM FILE-
Student.DAT
2. fgets()
*fgets() stands for file get string.
* The fgets() function reads at most one less than the number of characters specified by size (gets
size - 1 characters) from the given stream and stores them in the string str. The fgets() terminates
as soon as it encounters either a newline character or end-of-file or any other error. However, if a
newline character is encountered it is retained. When all the characters are read without any error, a
'\0'
Ex:
#include<stdio.h>
void main()
{
FILE *fp; char str[80];
fp = fopen("Student.DAT", "r");
if(fp==NULL)
{
3. fgetc()
* The fgetc() function returns the next character from stream, or EOF if the end of file is reached
or if there is an error.
* fgetc returns the character read as an int or return EOF to indicate an error or end of file.
* fgetc() reads a single character from the current position of a file (file associated with stream). After
reading the character, the function increments the associated file pointer (if defined) to point to the
next
character. However, if the stream has already reached the end of file, the end-of-file indicator for the
stream is set.
Ex: Write a C program to copy a text file to another, read both the input file name and
target file name.
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *fptr1, *fptr2;
char filename1[100], filename2[100],ch;
printf("Enter the filename to open for reading: \n");
scanf("%s", filename1);
fptr1 = fopen(filename1, "r");if (fptr1
== NULL)
{
4. fread ()
* The fread() function is used to read data from a file.
* Its syntax can be given as
int fread( void *str, size_t size, size_t num, FILE *stream );
* The function fread() reads num number of objects (where each object is size bytes) and
places them
into the array pointed to by str. The data is read from the given input stream.
* Upon successful completion, fread() returns the number of bytes successfully read. The
number
of objects will be less than num if a read error or end-of-file is encountered. If size or num is
0, fread()
will return 0 and the contents of str and the state of the stream remain unchanged. In case
of error, theerror
indicator for the stream will be set.
The fread() function advances the file position indicator for the stream by the number of
bytes read.
Ex:
#include <stdio.h>void
main()
{
FILE *fp; char str[10];
fp = fopen("Letter.TXT", "r+");
if(fp==NULL)
{
printf("\n The file could not be opened");exit(1);
}
fread(str, 1, 10, fp);
str[10]= '\0';
printf("\n First 9 characters of the file are : %s", str);fclose(fp);
1. fprintf()
* The fpritnt() is used to write formatted output to stream.
* Its syntax can be given as,
int fprintf ( FILE * stream, const char * format, ... );
*The function writes to the specified stream, data that is formatted as specified by the
format argument.
After the format parameter, the function can have as many additional arguments as
specified in format.
* The parameter format in the fprintf() is nothing but a C string that contains the text that
has to be written
on to the stream.
Ex:
#include <stdio.h>void
main()
{
FILE *fp;int i;
char name[20];float salary;
fp = fopen("Details.TXT", "w");
if(fp==NULL)
{
printf("\n The file could not be opened");
exit(1);
}
for(i=0;i<10;i++)
{
printf ("\n Enter your name : ");gets(name);
printf ("\n Enter your salary : ");scanf("%f",
&salary);
fprintf(fp, " NAME : %s \t SALARY: %f", name, salary);
}
fclose(fp);
}
2. fputs()
The fputs() is used to write a line into a file.
The syntax of fputs() can be given as
int fputs( const char *str, FILE *stream );
The fputs() writes the string pointed to by str to the stream pointed to by
stream.
On successful completion, fputs() returns 0. In case of any error, fputs()
returns EOF.
Ex:
#include<stdio.h>void
main()
{
FILE *fp;
char feedback[100];
fp = fopen("Comments.TXT", "w");
if(fp==NULL)
{
printf("\n The file could not be opened");exit(1);
}
printf("\n Kindly give the feedback on this book : ");
gets(feedback);
fputs(feedback, fp);fclose(fp);
}
3. fputc()
*The fputc() is used to write a character to the stream.
*The syntax of fputc() can be given as,
int fputc(int c, FILE *stream);
2. The other way is to use the standard library function feof() which is defined in stdio.h.
The feof()
is used to distinguish between two cases
* When a stream operation has reached the end of a file
* When the EOF ("end of file") error code has been returned as a generic error indicator
even
when the end of the file has not been reached
* The prototype of feof() can be given as:
int feof(FILE *fp);
*feof() returns zero (false) when the end of file has not been reached and a one (true) if
the end-of-filehas
been reached.
while( !feof(fp)
{ fgets(str, 80, fp);
printf("\n %s", str);
}