C-Programming Chapter 5 File-handling-C
C-Programming Chapter 5 File-handling-C
C PROGRAMMING AND
DATA STRUCTURES
UNIT IV
FILES
Presented by
Mr.J.Viswanath,ME.,
AP-AI&DS
Console oriented
Input/Output
Console oriented – use terminal (keyboard/screen)
Concept of files
Files
File – place on disc where group of related data is stored
◦ E.g. your C programs, executables
fp = fopen(“filename”, “mode”);
/*opens file with name filename , assigns identifier to fp */
fp
◦ contains all information about file
◦ Communication link between system and program
Mode can be
◦ r open file for reading only
◦ w open file for writing only
◦ a open file for appending (adding) data
Different modes
Writing mode
◦ if file already exists then contents are deleted,
◦ else new file with specified name created
Appending mode
◦ if file already exists then file opened with contents safe
◦ else new file created
Reading mode
◦ if file already exists then opened with contents safe
◦ else error occurs.
Ensures
◦ All outstanding information associated with file flushed out from buffers
◦ All links to file broken
◦ Accidental misuse of file prevented
If want to change mode of file, then first close and open again
Closing a file
Syntax: fclose(file_pointer);
Example:
syntax: c = getc(fp2);
◦ c : a character variable
◦ fp2 : pointer to file opened with mode r
file pointer moves by one character position after every getc() and putc()
getc() returns end-of-file marker EOF when file end reached
Program to read/write using
getc/putc
#include <stdio.h>
main()
{ FILE *fp1;
char c;
f1= fopen(“INPUT”, “w”); /* open file for writing */
while((c=getchar()) != EOF) /*get char from keyboard until CTL-Z*/
putc(c,f1); /*write a character to INPUT */
fclose(f1); /* close INPUT */
f1=fopen(“INPUT”, “r”); /* reopen file */
fclose(f1);
} /*end main */
fscanf() and fprintf()
similar to scanf() and printf()
in addition provide file-pointer
given the following
◦ file-pointer f1 (points to file opened in write mode)
◦ file-pointer f2 (points to file opened in read mode)
◦ integer variable i
◦ float variable f
Example:
fprintf(f1, “%d %f\n”, i, f);
fprintf(stdout, “%f \n”, f); /*note: stdout refers to screen */
fscanf(f2, “%d %f”, &i, &f);
fscanf returns EOF when end-of-file reached
getw() and putw()
handle one integer at a time
syntax: putw(i,fp1);
◦ i : an integer variable
◦ fp1 : pointer to file opened with mode w
syntax: i = getw(fp2);
◦ i : an integer variable
◦ fp2 : pointer to file opened with mode r
file pointer moves by one integer position, data stored in binary format native
to local system
getw() returns end-of-file marker EOF when file end reached
Errors that occur during I/O
Typical errors that occur
fp = fopen(“input.dat”, “r”);
if (fp == NULL)
printf(“File could not be opened \n ”);
Random access to files
how to jump to a given position (byte number) in a file without reading all
the previous data?
fseek (file-pointer, offset, position);
position: 0 (beginning), 1 (current), 2 (end)
offset: number of locations to move from position
Example: fseek(fp,-m, 1); /* move back by m bytes from current
position
*/
fseek(fp,m,0); /* move to (m+1)th byte in file */
fseek(fp, -10, 2); /* what is this? */