RocksDB and LevelDB has an abstraction called Env (environment) which provides an interface to access Operating system specific functions. This abstraction is there in the traditional BerkeleyDB also. It nicely separates Database code from the OS specific functionality by encapsulating it.
The Env object provides an interface to access System time, File System API, Thread API, Synchronization primitives and Shared Library management API. The RocksDB distributions comes with few supported environments such as Posix, HDFS, Windows, etc. You can also customize some part of the environment by providing new implementation. For example you can customize FileSystem calls used by Env object with memory based implementation or you can mirror the writes to another environment.
To implement a new environment for ex: Cloud environment, you need to override the virtual functions in Env class and provide an implementation with Cloud APIs.
It is the default Environment when you create a new Database. It uses various POSIX calls for proving OS level services. Below table describes the various APIs used
| Time ||clock_gettime(), gettimeofday()|
|File||fopen(), fclose(), open(), close(), fcntl(), stat(), fsync(), statvfs(), rename(), link(), unlink(), access(), pread(), pwrite()|
| Directory ||mkdir(), rmdir(), getcwd(), opendir() and readdir()|
|Threads|| pthread_create(), pthread_self(), pthread_mutex_init(), pthread_mutex_lock(), pthread_mutex_unlock(), pthread_join()|
| Libraries ||dlopen(), dlclose(), dlsym() and dlerror()|
If you want to understand the RocksDB source code you can debug the code using the information provided in another blog post How To Debug RocksDB Source Code.