7.0 files and c input
DESCRIPTION
TRANSCRIPT
![Page 1: 7.0 files and c input](https://reader036.vdocuments.us/reader036/viewer/2022082603/5461de79b1af9fbc4d8b4e8c/html5/thumbnails/1.jpg)
Files and C Input/Output
![Page 2: 7.0 files and c input](https://reader036.vdocuments.us/reader036/viewer/2022082603/5461de79b1af9fbc4d8b4e8c/html5/thumbnails/2.jpg)
Learning outcomes
At the end of this section you will be able to Understand the concepts involved in accessing
secondary storage by computer programs Understand how to deal with disk files in C Write programs those read and write into files in a
secondary storage
![Page 3: 7.0 files and c input](https://reader036.vdocuments.us/reader036/viewer/2022082603/5461de79b1af9fbc4d8b4e8c/html5/thumbnails/3.jpg)
Introduction
All input and output in C are from and to files. File is a sequence of bytes. (text files use \n) Open, Process, Close An open file is identified by a “File Access
Control Block”
![Page 4: 7.0 files and c input](https://reader036.vdocuments.us/reader036/viewer/2022082603/5461de79b1af9fbc4d8b4e8c/html5/thumbnails/4.jpg)
File Access Control Blocks
struct iobuf {
char *_ptr; // Current ch. position
int *_cnt; // Remaining bytes
char *_base; // Buffer base address
char _flag; // Access control flags
char _file; } // File number #define FILE struct _iobuf /* stdio.h */ #define EOF -1 typedef struct _iobuf FILE;
![Page 5: 7.0 files and c input](https://reader036.vdocuments.us/reader036/viewer/2022082603/5461de79b1af9fbc4d8b4e8c/html5/thumbnails/5.jpg)
FCB’s cont…
First 3 file access control blocks are automatically assigned to standard input standard output and standard error devices FILE *stdin, *stdout, *stderr
Standard input and output devices can be redefined for a program at the command line as, Process <infile >outfile
![Page 6: 7.0 files and c input](https://reader036.vdocuments.us/reader036/viewer/2022082603/5461de79b1af9fbc4d8b4e8c/html5/thumbnails/6.jpg)
stdio.h
Many IO libray functions come in pairs (or in triplets) whose operational differs only slightly. printf(“Hello world”); // prints to stdout fprintf(fp,“Hello world”) // prints to a file identified
by fp fprintf(stdout,“Hello world”) // same as the first
fp is a pointer to a file access control block and is returned by a successful fopen() operation.
![Page 7: 7.0 files and c input](https://reader036.vdocuments.us/reader036/viewer/2022082603/5461de79b1af9fbc4d8b4e8c/html5/thumbnails/7.jpg)
fopen()
FILE *fp; /* declares a file pointer or a stream */
char s[]=“c:\\mydir\\temp.txt”;
If ((fp=fopen(s,“wt”)) == NULL) printf(“file open error”);
Mode string “r | w | a [+] [ t | b ]” r : open for read w : create for write a : open for append/create for write + : permits both read and write t | b : in text or binary mode
![Page 8: 7.0 files and c input](https://reader036.vdocuments.us/reader036/viewer/2022082603/5461de79b1af9fbc4d8b4e8c/html5/thumbnails/8.jpg)
fclose()
To close an opened file, if (fclose(fp)!=0) printf(“file close error”);
If necessary file’s buffer is first flushed (written back to the file) before it is closed.
fclose() is automatically called for each open file when a program terminates normally.
![Page 9: 7.0 files and c input](https://reader036.vdocuments.us/reader036/viewer/2022082603/5461de79b1af9fbc4d8b4e8c/html5/thumbnails/9.jpg)
Character transfers to/from files
getc(fp) and fgetc((fp) reads a ch from the stream fp. putc(c,fp) and fputc(c,fp) writes c into the stream fp. ungetc(c,fp) push back the character just read to fp. All 5 returns the ch. on success and EOF on failure
Eg –
while ((*ptr++=getc(fp))!=EOF) …;
while (putc(*ptr++)) …; #define getchar() getc(stdin) #define putchar(c) putc(c,stdout) // in
stdio.h
![Page 10: 7.0 files and c input](https://reader036.vdocuments.us/reader036/viewer/2022082603/5461de79b1af9fbc4d8b4e8c/html5/thumbnails/10.jpg)
Line IO
Line ch sequence terminating in a ‘\n’ Simplest form of a record in a C file.
fgets(s,n,fp) reads the next line (including ‘\n’) up to a maximum of n chs from stream fp and writes into memory buffer starting from s with a terminating ‘\0’.
gets(s) reads a line from stdin and placed in memory starting from s, ‘\n’ replaced by a ’\0’.
gets() and fgets() return s on success and a NULL on failure.
![Page 11: 7.0 files and c input](https://reader036.vdocuments.us/reader036/viewer/2022082603/5461de79b1af9fbc4d8b4e8c/html5/thumbnails/11.jpg)
fputs(s,fp) writes a string beginning at s onto the stream fp without ‘\0’.
puts(s) same as fputs(s,stdout) but appends a ‘\n’. puts() fputs() returns last ch or 0 on success and
EOF on failure.
These return values permit statements such as, while(strlen(gets(s)) …; while (fgets(s,MAX_LINE,fp1) != NULL) fputs(s,fp2);
![Page 12: 7.0 files and c input](https://reader036.vdocuments.us/reader036/viewer/2022082603/5461de79b1af9fbc4d8b4e8c/html5/thumbnails/12.jpg)
Formatted IO
The characters –123.45E-7 printed on a display or typed in a keyboard is totally different from the form it is stored in memory.
printf(f), fprintf(fp,f), sprintf(s,f) - Return the no. of bytes output on success and EOF on failure.
Eg- printf(“\nAverage = %-8.4f”,avg); scanf(f), fscanf(fp,f), sscanf(s,f) – On success
return the no. of fields scanned and stored. Return EOF on failure.
![Page 13: 7.0 files and c input](https://reader036.vdocuments.us/reader036/viewer/2022082603/5461de79b1af9fbc4d8b4e8c/html5/thumbnails/13.jpg)
Binary IO
fread(ptr,i,n,fp) Transfers n data blocks of each of size i bytes
from stream fp into memory buffer at ptr. Returns the no.of blocks read.
fwrite(ptr,i,n,fp) Appends n data items in memory at ptr each of
size i to the stream fp. Returns no. of bytes written.
![Page 14: 7.0 files and c input](https://reader036.vdocuments.us/reader036/viewer/2022082603/5461de79b1af9fbc4d8b4e8c/html5/thumbnails/14.jpg)
Further File Operations
unlink(“fname”) removes fname from the file system
rewind(fp) set the current file position at start of file.
fseek(fp,L,i) place the file position L bytes from i i is 0|1|2 for start | current | end L is a long integer
unlink and fseek return 0 on success and –1 on failure. rewind does not return any value.
ftell(fp) returns current byte position as a long and -1 on failure
feof() detects end-of-file marker in a file