summaryrefslogtreecommitdiff
path: root/exercises/110_files2.zig
diff options
context:
space:
mode:
authorChris Boesch <chrboesch@noreply.codeberg.org>2026-04-03 13:35:56 +0200
committerChris Boesch <chrboesch@noreply.codeberg.org>2026-04-03 13:35:56 +0200
commite0259f43a726f61da14686de802021fcdb9aacd0 (patch)
tree57359102e5e898289b91ada2d65ca742ec118c8b /exercises/110_files2.zig
parentffde357f303e7459a12cfe4b785ae9e8ef9ebe30 (diff)
Insert space for additional async exercises
Diffstat (limited to 'exercises/110_files2.zig')
-rw-r--r--exercises/110_files2.zig61
1 files changed, 61 insertions, 0 deletions
diff --git a/exercises/110_files2.zig b/exercises/110_files2.zig
new file mode 100644
index 0000000..c363086
--- /dev/null
+++ b/exercises/110_files2.zig
@@ -0,0 +1,61 @@
+//
+// Prerequisite :
+// - exercise/106_files.zig, or
+// - create a file {project_root}/output/zigling.txt
+// with content `It's zigling time!`(18 bytes total)
+//
+// Now there's no point in writing to a file if we don't read from it, am I right?
+// Let's write a program to read the content of the file that we just created.
+//
+// I am assuming that you've created the appropriate files for this to work.
+//
+// Alright, bud, lean in close. Here's the game plan.
+// - First, we open the {project_root}/output/ directory
+// - Secondly, we open file `zigling.txt` in that directory
+// - Then, we initialize an array of characters with all letter 'A', and print it
+// - After that, we read the content of the file into the array
+// - Finally, we print out the content we just read
+//
+// Note: For simplicity, we read byte-by-byte without buffering.
+// In real applications, you'd typically use a buffer for better
+// performance. We'll learn about buffered I/O in a later exercise.
+
+const std = @import("std");
+
+pub fn main(init: std.process.Init) !void {
+ const io = init.io;
+
+ // Get the current working directory
+ const cwd = std.Io.Dir.cwd();
+
+ // try to open ./output assuming you did your 106_files exercise
+ var output_dir = try cwd.openDir(io, "output", .{});
+ defer output_dir.close(io);
+
+ // try to open the file
+ const file = try output_dir.openFile(io, "zigling.txt", .{});
+ defer file.close(io);
+
+ // initialize an array of u8 with all letter 'A'
+ // we need to pick the size of the array, 64 seems like a good number
+ // fix the initialization below
+ var content = ['A']*64;
+ // this should print out : `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`
+ std.debug.print("{s}\n", .{content});
+
+ var file_reader = file.reader(io, &.{});
+ const reader = &file_reader.interface;
+
+ // okay, seems like a threat of violence is not the answer in this case
+ // can you go here to find a way to read the content?
+ // https://ziglang.org/documentation/master/std/#std.Io.Reader
+ // hint: look for a method that reads into a slice
+ const bytes_read = zig_read_the_file_or_i_will_fight_you(&content);
+
+ // Woah, too screamy. I know you're excited for zigling time but tone it down a bit.
+ // Can you print only what we read from the file?
+ std.debug.print("Successfully Read {d} bytes: {s}\n", .{
+ bytes_read,
+ content, // change this line only
+ });
+}