diff --git a/workbench/files_handling/main.c b/workbench/files_handling/main.c new file mode 100644 index 0000000..65fa938 --- /dev/null +++ b/workbench/files_handling/main.c @@ -0,0 +1,88 @@ +#include +#include +#include +#include + +#define BUFFER_SIZE 256 + +void create_file(const char *filename) { + FILE *file = fopen(filename, "w"); + if (file == NULL) { + printf("Error creating file: %s\n", filename); + exit(1); + } + fclose(file); +} + +void write_to_file(const char *filename, const char *content) { + FILE *file = fopen(filename, "w"); + if (file == NULL) { + printf("Error opening file: %s\n", filename); + exit(1); + } + fputs(content, file); + fclose(file); +} + +void read_from_file(const char *filename) { + FILE *file = fopen(filename, "r"); + if (file == NULL) { + printf("Error opening file: %s\n", filename); + exit(1); + } + char ch; + while ((ch = fgetc(file)) != EOF) { + putchar(ch); + } + fclose(file); +} + +void append_to_file(const char *filename, const char *content) { + FILE *file = fopen(filename, "a"); + if (file == NULL) { + printf("Error opening file: %s\n", filename); + exit(1); + } + fputs(content, file); + fclose(file); +} + +void delete_file(const char *filename) { + if (remove(filename) != 0) { + printf("Error deleting file: %s\n", filename); + exit(1); + } +} + +int main() { + char filename[BUFFER_SIZE]; + char input_buffer[BUFFER_SIZE]; + + memset(filename, 0, BUFFER_SIZE); + memset(input_buffer, 0, BUFFER_SIZE); + + printf("Enter the filename: "); + + // last byte can be non-zero -> leak + fgets(filename, BUFFER_SIZE, stdin); + + create_file(filename); + + printf("Enter content to write to the file: "); + fgets(input_buffer, BUFFER_SIZE, stdin); + write_to_file(filename, input_buffer); + + printf("Content of the file:\n"); + read_from_file(filename); + + printf("\nEnter content to append to the file: "); + fgets(input_buffer, BUFFER_SIZE, stdin); + append_to_file(filename, input_buffer); + + printf("\nContent of the file after appending:\n"); + read_from_file(filename); + + delete_file(filename); + + return 0; +}