1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
// When reading files, it starts with the first byte and progresses. After calling
// fgetc(…), the file position moves forward by one byte. If we call fgetc(…) AFTER
// having read the last byte in the file, it returns a special value EOF (== -1) which
// indicates that you have read past the end of the file. AFTER it has returned EOF,
// calling feof(stream) will return true. The semantics here are important.
// Okay to copy/adapt this code if you understand it. Correctness if your responsibility.
void cat(char const* path) {
FILE* stream = fopen(path, "r"); // to open for reading, mode is "r"
// for writing → "w", for appending → "a"
for(char ch = fgetc(stream); ! feof(stream); ch = fgetc(stream)) {
fputc(ch, stdout); // write that character to stdout
}
// DO NOT USE EOF in your code!!! Use the formulation above.
fclose(stream);
// Always call fclose(…) once for every time you call fopen(…).
}
int main(int argc, char* argv[]) {
cat("animal.txt");
return EXIT_SUCCESS;
}
/* vim: set tabstop=4 shiftwidth=4 fileencoding=utf-8 noexpandtab: */
|
© Copyright 2021 Alexander J. Quinn This content is protected and may not be shared, uploaded, or distributed.