Language Guide

ReadDir with WASIX

This sample project demonstrates how to read directories in WASIX.



Please check that you have the latest version of wasmer runtime as this tutorial depends on version 4.1.1 or higher.

The project requires the following tools to be installed on your system:

Start a new project

Create a new directory for your project:

$ mkdir wasix-readdir
$ cd wasix-readdir

Make a new file called readdir.c:

$ touch readdir.c

Link the SysRoot


You need to link the SysRoot to your project. The SysRoot is a directory that contains the WASI libc headers and libraries. The SysRoot is located in the Wasix-libc binary or you can compile it yourself.

Writing the Application

Basic Application Setup

We want to write a simple C program that demonstrates how to use the opendir and readdir functions to read the contents of a directory. It takes a single command-line argument, which is the path to the directory to read.

Let's write code for the above:

#include <stdio.h>
#include <string.h>
#include <sys/random.h>
#include <unistd.h>
#include <dirent.h> // header file for functions for accessing directories
 * Recursive function to print the directory entries
int print_dir(char *name)
     * Return here or else the program will go into infinite recursion
    if (strcmp(name, "..") == 0 || strcmp(name, ".") == 0 || name == NULL)
        return 1;
    DIR *d = opendir(name); // open the directory and return a pointer to the directory stream
    for (;;)
        struct dirent *ent = readdir(d); // read the next directory entry from the directory stream
        if (ent == NULL)
        if (strcmp(ent->d_name, "..") == 0 || strcmp(ent->d_name, ".") == 0)
        printf("dir entry name - '%s'\n", ent->d_name);
         * If the entry is a directory then recursively call the function
    return 0;
int main(int argc, char **argv)
     * If the length of arguments is not equal to 2 then print the usage and return
    if (argc != 2)
        fprintf(stderr, "usage: %s <dir>\n", argv[0]);
        return 1;
    char *name = argv[1]; // name of the directory
    printf("main: just before opening dir '%s'\n", name);
    // call the recursive function
    return 0;

The main function takes the directory name as a command-line argument and calls the print_dir function to print the contents of the directory.

Compiling the Application

Let's compile the application with WASIX:

$ /path/to/wasix-sdk/clang readdir.c --target="wasm32-wasi" -o readdir.wasm

It's compiling! Now, let's try to run it:

$ wasmer run readdir.wasm /
main: just before opening dir '/'
dir entry name - '.app'
dir entry name - '.private'
dir entry name - 'bin'
dir entry name - 'dev'
dir entry name - 'etc'
dir entry name - 'tmp'

Yaay, It works!


In this tutorial we learned:

  • How to write a simple C program that uses the opendir and readdir functions to read the contents of a directory
  • Compiling a C program with WASIX