Skip to content

Latest commit

 

History

History
67 lines (57 loc) · 2.07 KB

README.org

File metadata and controls

67 lines (57 loc) · 2.07 KB

Summary

rsyscall is a library which provides a interface to an ever-growing subset of Linux system calls. This interface is:

  • process-independent: all system calls are called as methods on process objects, which can refer to the “local” process or to other processes under our control, possibly on remote hosts.
  • type-safe: many Linux API constraints, which are usually left to user code to enforce, are made explicit in the type system.
  • low-level: any action which is possible with the underlying Linux APIs, is possible with rsyscall; nothing is forbidden or discouraged.

For more detail on the concepts and motivation behind rsyscall, read the conceptual introduction.

Quick Start

Check out the docs at rsyscall.org.

Note that the rsyscall Python API uses some recent Python 3 features: async/await and type annotations. If you haven’t seen those before, skim the background tutorial first.

Installation

There’s no official release of rsyscall yet.

But, if you want to try it, you can do so with Nix:

git clone https://github.com/catern/rsyscall
cd rsyscall/python
nix-shell
python

Or you can build it by hand in a virtual environment:

git clone https://github.com/catern/rsyscall
cd rsyscall
python3 -m venv venv
. venv/bin/activate
pip install -U pip

cd c
autoreconf -fvi
./configure --prefix=$PWD/../venv
make install
cd ..
export LD_LIBRARY_PATH=$PWD/venv/lib
export PKG_CONFIG_PATH=$PWD/venv/lib/pkgconfig

pip install -e python/
python

Getting started

rsyscall is an async library that uses Trio, so the easiest way to try it out is with an async Python REPL. IPython provides a convenient REPL:

$ pip install ipython
$ ipython
In [1]: %autoawait trio

In [2]: import rsyscall

In [3]: t = await rsyscall.local_process.fork()

In [4]: await t.stdout.write(await t.ptr("Hello world!\n"))
Hello world!

Discussion

irc://irc.oftc.net/#rsyscall