diff --git a/documents/references.md b/documents/references.md
index 637d575545a83e3c0a6763cb63cb5d493af2b06c..c7f621cd066dcf6e08f0535aeaf75cd797bdced9 100644
--- a/documents/references.md
+++ b/documents/references.md
@@ -23,7 +23,9 @@ Includes anything from stack overflow links to notes about logic from previous w
 ### Compare Strings in C
 <https://www.programiz.com/c-programming/library-function/string.h/strcmp>
 
-
+### File Read In
+<https://www.tutorialspoint.com/cprogramming/c_file_io.htm>
+<https://stackoverflow.com/a/39237609>
 
 
 ## Makefile
diff --git a/main.c b/main.c
index 2340ccf53f6266a02be47ff545ad51bf2288c6db..9975e5d0a03b5d75ac0e3a82406e99aee17ecc27 100644
--- a/main.c
+++ b/main.c
@@ -29,6 +29,7 @@
 
 
 // Method Declaration.
+void run_simulator(char*, int, int, int, bool);
 
 
 /**
@@ -48,7 +49,6 @@ int main(int argc, char* argv[]) {
     bool setting_blocks = false;
     bool setting_file = false;
 
-    printf("argc: %d\n", argc);
     // Loop through all passed args and process accordingly.
     for (int index = 0; index < argc; index++) {
 
@@ -92,22 +92,18 @@ int main(int argc, char* argv[]) {
             if (setting_sets) {
                 // Prior flag was sets. Set accordingly.
                 total_sets = atoi(arg);
-                printf("Set total_set value of %d.\n", total_sets);
 
             } else if (setting_lines) {
                 // Prior value was lines. Set accordingly.
                 lines_per_set = atoi(arg);
-                printf("Set lines_per_set value of %d.\n", lines_per_set);
 
             } else if (setting_blocks) {
                 // Prior flag was blocks. Set accordingly.
                 bits_per_block = atoi(arg);
-                printf("Set bits_per_block value of %d.\n", bits_per_block);
 
             } else if (setting_file) {
                 // Prior flag was blocks. Set accordingly.
                 file_name = arg;
-                printf("Set file_name value of %s.\n", file_name);
 
             } else {
                 // Could not determine what value is for. First index is file name so we can skip that.
@@ -124,5 +120,45 @@ int main(int argc, char* argv[]) {
         }
     }
 
+    // Check that all important values were set.
+    if (file_name == NULL || total_sets == -1 || lines_per_set == -1 || bits_per_block == -1) {
+        // One or more required args weren't provided.
+        fprintf(stderr, "Not all args set. Exiting program.\n");
+        exit(1);
+    } else {
+        run_simulator(file_name, total_sets, lines_per_set, bits_per_block, verbose);
+    }
+
     printf("\n\nTerminating program.\n");
 }
+
+
+/**
+ * Runs cache simulator logic.
+ */
+void run_simulator(char* file_name, int total_sets, int lines_per_set, int bits_per_block, bool verbose) {
+    printf("\nrun_simulator()\n");
+    printf("    file_name: %s\n", file_name);
+    printf("    total_sets: %d\n", total_sets);
+    printf("    lines_per_set: %d\n", lines_per_set);
+    printf("    bits_per_block: %d\n", bits_per_block);
+    printf("    verbose: %d\n", bits_per_block);
+
+    // Open file.
+    FILE* file_pointer = fopen(file_name, "r");
+    char* read_in_buffer = calloc(sizeof(char*), 255);
+
+    // Read in file line by line.
+    printf("\nReading in file:\n");
+    while (fgets(read_in_buffer, 255, file_pointer)) {
+        printf("    %s", read_in_buffer);
+
+        // Reset buffer for next possible line read in.
+        free(read_in_buffer);
+        read_in_buffer = calloc(sizeof(char*), 255);
+    }
+
+    free(read_in_buffer);
+    fclose(file_pointer);
+    printf("Done reading in file.\n");
+}