理想的にはRubyからのUnixシステムコールで遊んでみたいです。どうすればいいですか?
Fiddleについて聞いたことがありますが、どこから始めればよいのか、どのCライブラリに接続すればよいのかわかりません。
理想的にはRubyからのUnixシステムコールで遊んでみたいです。どうすればいいですか?
Fiddleについて聞いたことがありますが、どこから始めればよいのか、どのCライブラリに接続すればよいのかわかりません。
「インタラクティブに」とは、を介して意味すると思いますirb
。
Rubyのような高級言語は、さまざまな厚さのほとんどのカーネルシステムコールのラッパーを提供します。
およびのように、これらのラッパーが非常に薄くなる場合がsysread()
ありsyswrite()
ます。これらは、それぞれread(2)
ととほぼ同等です。write(2)
他のシステムコールは、ソケットI / Oのものなど、より厚いレイヤーの背後に隠されます。UNIXSocket.recv()
呼び出しが「システムコールの呼び出し」として正確にカウントされるかどうかはわかりません。あるレベルでは、まさにそれが起こりますが、あなたと実際のシステムコールの間にRubyとCのコードがどれだけあるかは誰にもわかりません。
次に、標準のRuby APIにまったく含まれていないシステムコールがあります。これは、のように、あまり意味がないためと考えられますmmap(2)
。そのシステムコールはすべて、メモリへの生のポインタに関するものです。これは、最初にRubyのような言語を使用することで回避することを選択したものです。たまたまサードパーティのRubymmapモジュールがありますが、Cからタップできるすべてのパワーを実際に提供するわけではありません。
上記syscall()
のコメントで指摘されているインターフェイスMatも同様の話です。理論的には、カーネル内の任意のシステムコールを呼び出すことができます。ただし、ポインタを処理したり、構造体のメモリにデータを正確に配置したりする機能がない場合、有用な呼び出しを行う機能はかなり制限されます。
システムコールを試してみたい場合は、Cを学びましょう。近道はありません。
Eric Wong は、Ruby でのシステムレベル プログラミングのメーリング リストを開始しました。現在はあまり活発ではありませんが、http://librelist.com/browser/usp.ruby/からアクセスできます。