#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; }