Files
File Pointer
A FILE * value represents an open stream returned by fopen.
file pointer
`FILE *file` stores the handle used by standard I/O functions.
close stream
`fclose` releases the stream when the program is done with it.
File Pointer
file_pointer.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
int main(void) {
int value = 7;
FILE *file = fopen("file_pointer_demo.txt", "w+");
if (file == 0) {
return 1;
}
fprintf(file, "%d\n", value);
rewind(file);
int read = 0;
fscanf(file, "%d", &read);
fclose(file);
remove("file_pointer_demo.txt");
printf("read=%d\n", read);
return 0;
}
#include <stdio.h>
int main(void) {
int value = 3;
FILE *file = fopen("file_pointer_demo.txt", "w+");
if (file == 0) {
return 1;
}
fprintf(file, "%d\n", value);
rewind(file);
int read = 0;
fscanf(file, "%d", &read);
fclose(file);
remove("file_pointer_demo.txt");
printf("read=%d\n", read);
return 0;
}
#include <stdio.h>
int main(void) {
int value = 11;
FILE *file = fopen("file_pointer_demo.txt", "w+");
if (file == 0) {
return 1;
}
fprintf(file, "%d\n", value);
rewind(file);
int read = 0;
fscanf(file, "%d", &read);
fclose(file);
remove("file_pointer_demo.txt");
printf("read=%d\n", read);
return 0;
}
value ← 7, file ← ⟨addr A⟩, read ← 0
3int main(void) {4 int value→ 7 = 7; //@value=3, 115 FILE *file→ ⟨addr A⟩ = fopen("file_pointer_demo.txt", "w+");67 if (file == 0) {8 return 1;9 }1011 fprintf(file⟨addr A⟩, "%d\n", value7);12 rewind(file⟨addr A⟩);1314 int read→ 0 = 0;15 fscanf(file⟨addr A⟩, "%d", &read→ 7);16 fclose(file⟨addr A⟩);17 remove("file_pointer_demo.txt");1819 printf("read=%d\n", read7);20 return 0;21}outputread=7
value ← 3, file ← ⟨addr A⟩, read ← 0
3int main(void) {4 int value→ 3 = 3;5 FILE *file→ ⟨addr A⟩ = fopen("file_pointer_demo.txt", "w+");67 if (file == 0) {8 return 1;9 }1011 fprintf(file⟨addr A⟩, "%d\n", value3);12 rewind(file⟨addr A⟩);1314 int read→ 0 = 0;15 fscanf(file⟨addr A⟩, "%d", &read→ 3);16 fclose(file⟨addr A⟩);17 remove("file_pointer_demo.txt");1819 printf("read=%d\n", read3);20 return 0;21}outputread=3
value ← 11, file ← ⟨addr A⟩, read ← 0
3int main(void) {4 int value→ 11 = 11;5 FILE *file→ ⟨addr A⟩ = fopen("file_pointer_demo.txt", "w+");67 if (file == 0) {8 return 1;9 }1011 fprintf(file⟨addr A⟩, "%d\n", value11);12 rewind(file⟨addr A⟩);1314 int read→ 0 = 0;15 fscanf(file⟨addr A⟩, "%d", &read→ 11);16 fclose(file⟨addr A⟩);17 remove("file_pointer_demo.txt");1819 printf("read=%d\n", read11);20 return 0;21}outputread=11