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

St. Vincent Pallotti College of Engineering & Technology

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

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Éâ‹