0% found this document useful (0 votes)
4 views29 pages

Data Structure Lect-27-File-CmdLine

The document provides an overview of file handling in programming, explaining the importance of using files for persistent data storage. It covers basic file operations such as opening, reading, writing, and closing files, along with the different modes for file access. Additionally, it discusses command line arguments and how to access them within a program.

Uploaded by

Abhishek Goutam
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views29 pages

Data Structure Lect-27-File-CmdLine

The document provides an overview of file handling in programming, explaining the importance of using files for persistent data storage. It covers basic file operations such as opening, reading, writing, and closing files, along with the different modes for file access. Additionally, it discusses command line arguments and how to access them within a program.

Uploaded by

Abhishek Goutam
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 29

File Handling

1
Storage seen so far
 All variables stored in memory
 Problem: the contents of memory are wiped out
when the computer is powered off
 Example: Consider keeping students’ records
 100 students records are added in array of
structures
 Machine is then powered off after sometime
 When the machine is powered on, the 100 records
entered earlier are all gone!
 Have to enter again if they are needed
2
Solution: Files
 A named collection of data, stored in secondary
storage like disk, CD-ROM,
ROM, USB drives etc.
 Persistent storage, not lost when machine is
powered off
 Save data in memory to files if needed (file
write)
 Read data from file later whenever needed (file
read)

3
Organization of a file
 Stored as sequence of bytes, logically contiguous
 May not be physically contiguous on disk, but you
do not need to worry about that
 The last byte of a file contains the end-of-file
end
character (EOF),), with ASCII code 1A (hex).
 While reading a text file, the EOF character can be
checked to know the end
 Two kinds of files:
 Text : contains ASCII codes only
 Binary : can contain non-ASCII
non characters
 Example: Image, audio, video, executable, etc.

 EOF cannot be used to check end of file


4
Basic operations on a file
 Open
 Read
 Write
 Close
 Mainly we want to do read or write, but a file has
to be opened before read/write, and should be
closed after all read/write is over

5
Opening a File: fopen()

 FILE * is a datatype used to represent a


pointer to a file
 fopen takes two parameters, the name of the
file to open and the mode in which it is to be
opened
 It returns the pointer to the file if the file is
opened successfully, or NULL to indicate that it
is unable to open the file

6
Example: opening file.dat for write
FILE *fptr;
char filename[ ]= "file2.dat";
fptr = fopen (filename,"w");
if (fptr == NULL) {
printf (“ERROR IN FILE CREATION”);
/* DO SOMETHING */
}

7
Modes for opening files
 The second argument of fopen is the mode in
which we open the file.

8
Modes for opening files
 The second argument of fopen is the mode in
which we open the file.
 "r" : opens a file for reading (can only read)
 Error if the file does not already exists
 "r+" : allows write also

9
Modes for opening files
 The second argument of fopen is the mode in
which we open the file.
 "r" : opens a file for reading (can only read)
 Error if the file does not already exists
 "r+" : allows write also

 "w" : creates a file for writing (can only write)


 Will create the file if it does not exist
 Caution: writes over all previous contents if the
flle already exists
 "w+" : allows read also

10
Modes for opening files
 The second argument of fopen is the mode in
which we open the file.
 "r" : opens a file for reading (can only read)
 Error if the file does not already exists
 "r+" : allows write also

 "w" : creates a file for writing (can only write)


 Will create the file if it does not exist
 Caution: writes over all previous contents if the
flle already exists
 "w+" : allows read also

 "a": opens a file for appending (write at the


end of the file)
 "a+" : allows read also
11
The exit() function
 Sometimes error checking means we want
an emergency exit from a program
 Can be done by the exit() function
 The exit() function, called from anywhere
in your C program, will terminate the
program at once

12
Usage of exit( )
FILE *fptr;
char filename[]= "file2.dat";
fptr = fopen (filename,"w");
if (fptr == NULL) {
printf (“ERROR IN FILE CREATION”);
/* Do something */
exit(-1);
}
………rest of the program………
13
Writing to a file: fprintf( )
 fprintf() works exactly like printf(),
printf() except that
its first argument is a file pointer. The
remaining two arguments are the same as
printf
 The behaviour is exactly the same,
same except that
the writing is done on the file instead of the
display
FILE *fptr;
fptr = fopen ("file.dat","w");
fprintf (fptr, "Hello World!\n");
World!
fprintf (fptr, “%d %d”, a, b);
14
Reading from a file: fscanf( )
 fscanf() works like scanf(),
scanf() except that its first
argument is a file pointer. The remaining two
arguments are the same as scanf
 The behaviour is exactly the same,
same except
 The reading is done from the file instead of from
the keyboard (think as if you typed the same thing
in the file as you would in the keyboard for a scanf
with the same arguments)
 The end-of-file
file for a text file is checked differently
(check against special character EOF)

15
Reading from a file: fscanf( )
FILE *fptr;
EOF checking in a loop
fptr = fopen (“input.dat”, “r”);
/* Check it's open */ char ch;
if (fptr == NULL) while (fscanf(fptr, “%c”,
{ &ch) != EOF)
printf(“Error in opening file \n”);
n”); {
exit(-1); /* not end of file; read */
}
}
fscanf (fptr, “%d %d”,&x, &y);

16
Reading lines from a file: fgets()
 Takes three parameters
a character array str,, maximum number of characters
to read size,, and a file pointer fp
 Reads from the file fp into the array str until any
one of these happens
 No. of characters read = size - 1
 \n is read (the char \n
n is added to str)
 EOF is reached or an error occurs
 ‘\0’ added at end of str if no error
 Returns NULL on error or EOF, otherwise returns
pointer to str
17
Reading lines from a file: fgets()

FILE *fptr;
char line[1000];
/* Open file and check it is open */
while (fgets(line,1000,fptr) != NULL)
{
printf ("Read line %s\n",line);
%s
}

18
Writing lines to a file: fputs()
 Takes two parameters
A string str (null terminated) and a file pointer
fp
 Writes the string pointed to by str into the
file
 Returns non-negative
negative integer on success,
EOF on error

19
Reading/Writing a character:
fgetc(), fputc()
 Equivalent of getchar(),
getchar() putchar() for
reading/writing char from/to keyboard
 Exactly same, except that the first
parameter is a file pointer
 Equivalent to reading/writing a byte (the
char)
int fgetc(FILE *fp);
int fputc(int c, FILE *fp);
 Example:
char c;
c = fgetc(fp1); fputc(c, fp2); 20
Formatted and Un-formatted
Un I/O

 Formatted I/O
 Using fprintf/fscanf
 Can specify format strings to directly read as
integers, float etc.
 Unformatted I/O
 Using fgets/fputs/fgetc/fputc
 No format string to read different data types
 Need to read as characters and convert explicitly

21
Closing a file
 Should close a file when no more read/write
to a file is needed in the rest of the program
 File is closed using fclose() and the file
pointer

FILE *fptr;
char filename[]= "myfile.dat";
fptr = fopen (filename,"w");
fprintf (fptr,"Hello World of filing!\n");
filing!
…. Any more read/write to myfile.dat….
fclose (fptr);
22
Command Line
Arguments

23
What are they?
 A program can be executed by directly
typing a command with parameters at the
prompt
$ cc –o test test.c
$ ./a.out in.dat out.dat
$ prog_name param_1 param_2 param_3
..
 The individual items specified are
separated from one another by spaces
 First item is the program name
24
What do they mean?
 Recall that main() is also a function
 It can also take parameters, just like other
C function
 The items in the command line are passed
as parameters to main
 Parameters argc and argv in main keeps
track of the items specified in the
command line

25
How to access them?
int main (int argc, char *argv[]);

Argument Array of strings


Count as command line
arguments including
the command itself.

The parameters are filled up with the command line


arguments typed when the program is run
They can now be accessed inside main just like any
other variable
26
Example: Contd.
$ ./a.out s.dat d.dat

argc=3
./a.out
s.dat
d.dat
argv

argv[0] = “./a.out” argv[1] = “s.dat” argv[2] = “d.dat”

27
Contd.
 Still there is a problem
 All the arguments are passed as strings in argv[ ]
 But the intention may have been to pass an
int/float etc.
 Solution: Use sscanf()
 Exactly same as scanf, just reads from a string
(char *) instead of from the keyboard
 The first parameter is the string pointer, the next
two parameters are exactly the same as scanf

28
Example
 Write a program that takes as command line
arguments 2 integers, and prints their sum

int main(int argc, char *argv[ ])


{ $ ./a.out 32 54
int i, n1, n2;
printf(“No. of arg is %d\n”,
n”, argc); No. of arg is 3
for (i=0; i<argc; ++i) ./a.out
printf(“%s\n”, argv[i]);
sscanf(argv[1], “%d”, &n1); 32
sscanf(argv[2], “%d”, &n2); 54
printf(“Sum is %d\n”,
n”, n1 + n2);
return 0; Sum is 86
} 29

You might also like