Opening and closing files - Time & Space Complexity
When we open and close files in C, we want to know how the time it takes changes as we do more operations.
We ask: How does the time grow when opening and closing files multiple times?
Analyze the time complexity of the following code snippet.
#include <stdio.h>
int main() {
FILE *file;
int n = 1000;
for (int i = 0; i < n; i++) {
file = fopen("data.txt", "r");
if (file != NULL) {
fclose(file);
}
}
return 0;
}
This code opens and closes the same file n times in a loop.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Opening and closing the file inside the loop.
- How many times: Exactly
ntimes, once per loop iteration.
Each time we increase n, the number of open-close actions grows the same amount.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 open-close pairs |
| 100 | 100 open-close pairs |
| 1000 | 1000 open-close pairs |
Pattern observation: The total work grows directly with n. Double n, double the work.
Time Complexity: O(n)
This means the time to run grows in a straight line as you increase the number of times you open and close the file.
[X] Wrong: "Opening and closing a file is instant, so it doesn't affect time much."
[OK] Correct: Each open and close takes some time, so doing it many times adds up and grows with n.
Understanding how repeated file operations add up helps you explain performance in real programs and shows you think about efficiency clearly.
"What if we opened the file once before the loop and closed it after? How would the time complexity change?"
Practice
fopen function do in C programming?Solution
Step 1: Understand the purpose of fopen
Thefopenfunction is used to open a file and returns a pointer to the file stream if successful.Step 2: Differentiate fopen from other file functions
Functions likefcloseclose files,freadreads data, andfwritewrites data. Onlyfopenopens files.Final Answer:
It opens a file and returns a pointer to the file stream. -> Option BQuick Check:
fopen = open file pointer [OK]
- Confusing fopen with fclose
- Thinking fopen reads or writes data
- Not knowing fopen returns NULL on failure
Solution
Step 1: Identify correct fopen syntax
The correct syntax usesFILE *pointer andfopenwith filename and mode as strings.Step 2: Check mode for writing
Mode "w" opens the file for writing. "r" is for reading, andopenis not a standard C function for files.Final Answer:
FILE *fp = fopen("data.txt", "w"); -> Option AQuick Check:
fopen + "w" = open for writing [OK]
- Using open instead of fopen
- Declaring FILE variable instead of pointer
- Using wrong mode like "r" for writing
FILE *fp = fopen("nonexistent.txt", "r");
if (fp == NULL) {
printf("File not found\n");
} else {
printf("File opened successfully\n");
fclose(fp);
}Solution
Step 1: Understand fopen with "r" mode on nonexistent file
Opening a file for reading with "r" mode returns NULL if the file does not exist.Step 2: Check the if condition
The code checks iffp == NULL, then prints "File not found". Since file does not exist, this condition is true.Final Answer:
File not found -> Option CQuick Check:
fopen returns NULL if file missing [OK]
- Assuming fopen creates file in "r" mode
- Not checking for NULL before using file pointer
- Expecting "File opened successfully" always
FILE *fp;
fp = fopen("file.txt", "w");
printf("File opened\n");
// Missing fclose hereSolution
Step 1: Check fopen usage and mode
The fopen call with mode "w" is correct to open file for writing.Step 2: Identify missing fclose
The code opens the file but never closes it with fclose, which can cause resource leaks.Final Answer:
fclose is missing to close the file -> Option DQuick Check:
Always fclose after fopen [OK]
- Ignoring fclose causes resource leaks
- Not checking fopen return value
- Thinking printf affects file handling
Solution
Step 1: Choose correct mode for appending
Mode "a" opens file for appending without erasing existing content.Step 2: Check for NULL and handle errors
Always check if fopen returns NULL before writing. Use perror to show error if NULL.Step 3: Write and close file properly
Use fprintf to write text and fclose to close file to avoid leaks.Final Answer:
FILE *fp = fopen("log.txt", "a"); if (fp == NULL) { perror("Error opening file"); } else { fprintf(fp, "Hello\n"); fclose(fp); } -> Option AQuick Check:
Append mode + check NULL + fclose = safe file write [OK]
- Using "w" mode erases file instead of appending
- Not checking fopen return value before writing
- Forgetting to close file with fclose
Ready to prove it?
Pass the test and this pattern moves unknown
