diff --git a/src/stdplus/io_uring.cpp b/src/stdplus/io_uring.cpp
index 357f4c9..c824597 100644
--- a/src/stdplus/io_uring.cpp
+++ b/src/stdplus/io_uring.cpp
@@ -53,6 +53,18 @@
     ring->updateFile(slot, -1);
 }
 
+void IoUring::reserveFiles(size_t num)
+{
+    auto new_size = std::max<size_t>(7, num + filesAllocated);
+    if (files.size() < new_size)
+    {
+        io_uring_unregister_files(&ring);
+        files.resize(new_size, -1);
+        CHECK_RET(io_uring_register_files(&ring, files.data(), files.size()),
+                  "io_uring_register_files");
+    }
+}
+
 [[nodiscard]] IoUring::FileHandle IoUring::registerFile(int fd)
 {
     unsigned slot = 0;
@@ -67,7 +79,7 @@
 
     io_uring_unregister_files(&ring);
     files.resize(std::max<size_t>(7, files.size() * 2 + 1), -1);
-    files[slot] = fd;
+    setFile(slot, fd);
     CHECK_RET(io_uring_register_files(&ring, files.data(), files.size()),
               "io_uring_register_files");
     return FileHandle(slot, *this);
@@ -168,9 +180,22 @@
     h->handleCQE(cqe);
 }
 
+void IoUring::setFile(unsigned slot, int fd) noexcept
+{
+    if (files[slot] == -1 && files[slot] != fd)
+    {
+        filesAllocated++;
+    }
+    else if (fd == -1 && files[slot] != fd)
+    {
+        filesAllocated--;
+    }
+    files[slot] = fd;
+}
+
 void IoUring::updateFile(unsigned slot, int fd)
 {
-    files[slot] = fd;
+    setFile(slot, fd);
     CHECK_RET(io_uring_register_files_update(&ring, slot, &files[slot], 1),
               "io_uring_register_files_update");
 }
diff --git a/src/stdplus/io_uring.hpp b/src/stdplus/io_uring.hpp
index 62539ea..5e9e778 100644
--- a/src/stdplus/io_uring.hpp
+++ b/src/stdplus/io_uring.hpp
@@ -57,6 +57,13 @@
     IoUring& operator=(const IoUring&) = delete;
     ~IoUring();
 
+    /** @brief Reserves an additional number of file descriptor slots
+     *
+     *  @param[in] num - The number of slots to register
+     *  @throws std::system_error if the allocation fails
+     */
+    void reserveFiles(size_t num);
+
     /** @brief Registers a file descriptor with a slot on the ring
      *
      *  @param[in] fd - The file descriptor to register
@@ -65,6 +72,13 @@
      */
     [[nodiscard]] FileHandle registerFile(int fd);
 
+    /** @brief Get current list of files descriptors registered on the ring.
+     * Note this view potentially expires when registrations change. */
+    inline stdplus::span<const int> getFiles() const noexcept
+    {
+        return files;
+    }
+
     /** @brief Gets an unused SQE from the ring
      *
      *  @throws std::system_error if the allocation fails
@@ -116,8 +130,10 @@
     std::optional<stdplus::ManagedFd> event_fd;
     std::vector<CQEHandler*> handlers;
     std::vector<int> files;
+    size_t filesAllocated = 0;
 
     void dropHandler(CQEHandler* h, io_uring_cqe& cqe) noexcept;
+    void setFile(unsigned slot, int fd) noexcept;
     void updateFile(unsigned slot, int fd);
 };
 
diff --git a/test/io_uring.cpp b/test/io_uring.cpp
index b50e519..c98462d 100644
--- a/test/io_uring.cpp
+++ b/test/io_uring.cpp
@@ -179,13 +179,16 @@
 
     // Slots are always allocated linearly and re-used if invalidated
     fh = ring.registerFile(0);
+    EXPECT_GT(ring.getFiles().size(), 1);
     EXPECT_EQ(*fh, 0);
     fh = ring.registerFile(1);
     EXPECT_EQ(*fh, 1);
+    EXPECT_EQ(ring.getFiles()[1], 1);
 
     // The first handle should have dropped and can be replaced
     fh = ring.registerFile(2);
     EXPECT_EQ(*fh, 0);
+    EXPECT_EQ(ring.getFiles()[0], 2);
 
     // We should be able to write to stderr via the fixed file and regular fd
     testFdWrite(2, 0);
@@ -197,11 +200,18 @@
     testFdWrite(*fh, IOSQE_FIXED_FILE, -EBADF);
 
     std::vector<IoUring::FileHandle> fhs;
-    for (size_t i = 0; i < 10; ++i)
+    EXPECT_LT(ring.getFiles().size(), 9);
+    ring.reserveFiles(9);
+    EXPECT_EQ(ring.getFiles().size(), 9);
+    for (size_t i = 0; i < 9; ++i)
     {
         fhs.emplace_back(ring.registerFile(2));
         testFdWrite(fhs.back(), IOSQE_FIXED_FILE);
     }
+    EXPECT_EQ(ring.getFiles().size(), 9);
+    fhs.emplace_back(ring.registerFile(2));
+    testFdWrite(fhs.back(), IOSQE_FIXED_FILE);
+    EXPECT_GE(ring.getFiles().size(), 10);
 }
 
 } // namespace stdplus
