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

value
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;
}
  1. 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
  1. 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
  1. 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