st. vincent pallotti college of engineering & technology

30
St. Vincent Pallotti St. Vincent Pallotti St. Vincent Pallotti St. Vincent Pallotti College of Engineering & College of Engineering & College of Engineering & College of Engineering & Technology, Nagpur Technology, Nagpur Technology, Nagpur Technology, Nagpur Department of Computer Engineering Department of Computer Engineering Department of Computer Engineering Department of Computer Engineering Presents Presents Presents Presents

Upload: others

Post on 25-Nov-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: St. Vincent Pallotti College of Engineering & Technology

St. Vincent Pallotti St. Vincent Pallotti St. Vincent Pallotti St. Vincent Pallotti

College of Engineering & College of Engineering & College of Engineering & College of Engineering &

Technology, NagpurTechnology, NagpurTechnology, NagpurTechnology, Nagpur

Department of Computer EngineeringDepartment of Computer EngineeringDepartment of Computer EngineeringDepartment of Computer Engineering

PresentsPresentsPresentsPresents

Page 2: St. Vincent Pallotti College of Engineering & Technology

Programming Language C Programming Language C Programming Language C Programming Language C

Files in CFiles in CFiles in CFiles in C

Page 3: St. Vincent Pallotti College of Engineering & Technology

Pre-requisite� Basics of the C programming language

� Data type

� Variable

� Array

� Function call

� Pointers

� Stuctures

� Standard Input/Output� e.g. printf(), scanf()

Page 4: St. Vincent Pallotti College of Engineering & Technology

Outline

� Physical files and Logical files

� Opening files

� Closing files

� Reading and Writing� Reading and Writing

Page 5: St. Vincent Pallotti College of Engineering & Technology

Physical files and Logical files� Physical file

� a file that actually exists on secondary storage

� a file as known by OS and that appears in file directory

� Logical file

� a file as seen by program

� allow program to describe operations to be performed on file not knowing what physical file will be used

Page 6: St. Vincent Pallotti College of Engineering & Technology

Console oriented Input/Output� Console oriented – use terminal (keyboard/screen)

� scanf(“%d”,&i) – read data from keyboard

� printf(“%d”,i) – print data to monitor

� Suitable for small volumes of data

� Data lost when program terminated

Page 7: St. Vincent Pallotti College of Engineering & Technology

Real-life applications� Large data volumes

� E.g. physical experiments (CERN collider), human genome, population records etc.genome, population records etc.

� Need for flexible approach to store/retrieve data

� Concept of files

Page 8: St. Vincent Pallotti College of Engineering & Technology

Files� File – place on disc where group of related data is

stored

� E.g. your C programs, executables

� High-level programming languages support file � High-level programming languages support file operations

� Naming

� Opening

� Reading

� Writing

� Closing

Page 9: St. Vincent Pallotti College of Engineering & Technology

Defining and opening file� To store data file in secondary memory (disc) must

specify to OS

� Filename (e.g. sort.c, input.data)� Filename (e.g. sort.c, input.data)

� Data structure (e.g. FILE)

� Purpose (e.g. reading, writing, appending)

Page 10: St. Vincent Pallotti College of Engineering & Technology

Filename� String of characters that make up a valid filename for

OS

� May contain two parts� May contain two parts

� Primary

� Optional period with extension

� Examples: a.out, prog.c, temp, text.out

Page 11: St. Vincent Pallotti College of Engineering & Technology

General format for opening file

� fp

FILE *fp; /*variable fp is pointer to type FILE*/

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

Page 12: St. Vincent Pallotti College of Engineering & Technology

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. FILE *p1, *p2;

p1 = fopen(“data”,”r”);

p2= fopen(“results”, w”);

Page 13: St. Vincent Pallotti College of Engineering & Technology

Additional modes� r+ open to beginning for both reading/writing

w+ same as w except both for reading and writing� w+ same as w except both for reading and writing

� a+ same as ‘a’ except both for reading and writing

Page 14: St. Vincent Pallotti College of Engineering & Technology

Closing a file

� File must be closed as soon as all operations on it completed

� Ensures

� All outstanding information associated with file flushed � 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

Page 15: St. Vincent Pallotti College of Engineering & Technology

Closing a fileSyntax: fclose(file_pointer);

Example:

FILE *p1, *p2;

p1 = fopen(“INPUT.txt”, “r”);

� pointer can be reused after closing

p1 = fopen(“INPUT.txt”, “r”);

p2 =fopen(“OUTPUT.txt”, “w”);

……..

……..

fclose(p1);

fclose(p2);

Page 16: St. Vincent Pallotti College of Engineering & Technology

Input / Output operations on files

� C provides several different functions for reading/writing

� getc() – read a character� getc() – read a character

� putc() – write a character

� fprintf() – write set of data values

� fscanf() – read set of data values

� getw() – read integer

� putw() – write integer

Page 17: St. Vincent Pallotti College of Engineering & Technology

getc() and putc()� handle one character at a time like getchar() and

putchar()

� syntax: putc(c,fp1);

� c : a character variable

� fp1 : pointer to file opened with mode w� fp1 : pointer to file opened with mode w

� 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

Page 18: St. Vincent Pallotti College of Engineering & Technology

Program to read/write using getc/putc#include <stdio.h>#include <stdio.h>#include <stdio.h>#include <stdio.h>

main()main()main()main()

{{{{ FILE *fp1;FILE *fp1;FILE *fp1;FILE *fp1;

char c;char c;char c;char c;

f1= fopen(“INPUT”, “w”); f1= fopen(“INPUT”, “w”); f1= fopen(“INPUT”, “w”); f1= fopen(“INPUT”, “w”); /* open file for writing *//* open file for writing *//* open file for writing *//* open file for writing */

while((c=getchar()) != EOF) while((c=getchar()) != EOF) while((c=getchar()) != EOF) while((c=getchar()) != EOF) /*get char from keyboard until CTL/*get char from keyboard until CTL/*get char from keyboard until CTL/*get char from keyboard until CTL----Z*/Z*/Z*/Z*/

putc(c,f1); putc(c,f1); putc(c,f1); putc(c,f1); /*write a character to INPUT */*write a character to INPUT */*write a character to INPUT */*write a character to INPUT *putc(c,f1); putc(c,f1); putc(c,f1); putc(c,f1); /*write a character to INPUT */*write a character to INPUT */*write a character to INPUT */*write a character to INPUT *

////

fclose(f1); fclose(f1); fclose(f1); fclose(f1); /* close INPUT *//* close INPUT *//* close INPUT *//* close INPUT */

f1=fopen(“INPUT”, “r”); f1=fopen(“INPUT”, “r”); f1=fopen(“INPUT”, “r”); f1=fopen(“INPUT”, “r”); /* reopen file *//* reopen file *//* reopen file *//* reopen file */

while((c=getc(f1))!=EOF) while((c=getc(f1))!=EOF) while((c=getc(f1))!=EOF) while((c=getc(f1))!=EOF) /*read character from file INPUT*//*read character from file INPUT*//*read character from file INPUT*//*read character from file INPUT*/

printf(“%c”, c);printf(“%c”, c);printf(“%c”, c);printf(“%c”, c); /* print character to screen *//* print character to screen *//* print character to screen *//* print character to screen */

fclose(f1);fclose(f1);fclose(f1);fclose(f1);

} /*end main */} /*end main */} /*end main */} /*end main */

Page 19: St. Vincent Pallotti College of Engineering & Technology

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

Page 20: St. Vincent Pallotti College of Engineering & Technology

getw() and putw()

� handle one integer at a time

� syntax: putw(i,fp1);

� i : an integer variable

� fp1 : pointer to file ipened 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

Page 21: St. Vincent Pallotti College of Engineering & Technology

C program using getw, putw,fscanf, fprintf

#include <stdio.h>main(){ int i,sum1=0;FILE *f1;/* open files */f1 = fopen("int_data.bin","w"); /* write integers to files in binary

and text format*/

#include <stdio.h>main(){ int i, sum2=0;FILE *f2;/* open files */f2 = fopen("int_data.txt","w");/* write integers to files in binary

and text format*/for(i=10;i<15;i++) printf(f2,"%d\n",i);

and text format*/for(i=10;i<15;i++) putw(i,f1); fclose(f1); f1 = fopen("int_data.bin","r");

while((i=getw(f1))!=EOF){ sum1+=i; printf("binary file: i=%d\n",i);

} /* end while getw */printf("binary sum=%d,sum1);fclose(f1);}

for(i=10;i<15;i++) printf(f2,"%d\n",i);fclose(f2); f2 = fopen("int_data.txt","r");while(fscanf(f2,"%d",&i)!=EOF)

{ sum2+=i; printf("text file: i=%d\n",i);} /*end while fscanf*/

printf("text sum=%d\n",sum2);fclose(f2);

}

Page 22: St. Vincent Pallotti College of Engineering & Technology

On execution of previous Programs

$ ./a.out

binary file: i=10

binary file: i=11

binary file: i=12

binary file: i=13

binary file: i=14

$ ./a.out

text file: i=10

text file: i=11

text file: i=12

text file: i=13

text file: i=14

text sum=60binary file: i=14

binary sum=60,

$ cat int_data.txt

10

11

12

13

14

text sum=60

$ more int_data.bin

^@^@^@^K^@^@^@^L^@^@^@^M^@^@^@^N^@^@^@

$

Page 23: St. Vincent Pallotti College of Engineering & Technology

Errors that occur during I/O� Typical errors that occur

� trying to read beyond end-of-file

� trying to use a file that has not been opened

� perform operation on file not permitted by ‘fopen’ mode

� open file with invalid filename

� write to write-protected file

Page 24: St. Vincent Pallotti College of Engineering & Technology

Error handling� given file-pointer, check if EOF reached, errors while

handling file, problems opening file etc.

� check if EOF reached: feof()

� feof() takes file-pointer as input, returns nonzero if all data read and zero otherwise

if(feof(fp))if(feof(fp))

printf(“End of data\n”);

� ferror() takes file-pointer as input, returns nonzero integer if error detected else returns zero

if(ferror(fp) !=0)

printf(“An error has occurred\n”);

Page 25: St. Vincent Pallotti College of Engineering & Technology

Error while opening file� if file cannot be opened then fopen returns a NULL

pointer

� Good practice to check if pointer is NULL before � Good practice to check if pointer is NULL before proceeding

fp = fopen(“input.dat”, “r”);

if (fp == NULL)

printf(“File could not be opened \n ”);

Page 26: St. Vincent Pallotti College of Engineering & Technology

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� 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? */

� ftell(fp) returns current byte position in file

� rewind(fp) resets position to start of file

Page 27: St. Vincent Pallotti College of Engineering & Technology

Command line arguments� can give input to C program from command line

E.g. > prog.c 10 name1 name2 ….

� how to use these arguments?main ( int argc, char *argv[] )

� argc – gives a count of number of arguments � argc – gives a count of number of arguments (including program name)

� char *argv[] defines an array of pointers to character (or array of strings)

� argv[0] – program name

� argv[1] to argv[argc -1] give the other arguments as strings

Page 28: St. Vincent Pallotti College of Engineering & Technology

Example args.c#include <stdio.h>

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

while(argc>0) /* print out all arguments in reverse order*/{

printf("%s\n",argv[argc-1]);argc--;

$ cc args.c -o args.out

$ ./args.out 2 join leave 6

6

leave

join

2

./args.out

$

} }

Page 29: St. Vincent Pallotti College of Engineering & Technology

Programming Assignment( Files )

� Write a program to accept a file name from the user. Display the contents of the file. Also add the entered string to the file.

� Any number is a command line argument. Write a program to display the number in reverse order.program to display the number in reverse order.

� Write a program to display no. of “the” stored in the file.

� Write a program to Copy contents of the file to another file.

� Write a program that accepts data into a file and prints it in reverse order.

Page 30: St. Vincent Pallotti College of Engineering & Technology

g{tÇ~ lÉâ‹g{tÇ~ lÉâ‹g{tÇ~ lÉâ‹g{tÇ~ lÉâ‹