0

理想的にはRubyからのUnixシステムコールで遊んでみたいです。どうすればいいですか?

Fiddleについて聞いたことがありますが、どこから始めればよいのか、どのCライブラリに接続すればよいのかわかりません。

4

2 に答える 2

4

「インタラクティブに」とは、を介して意味すると思いますirb

Rubyのような高級言語は、さまざまな厚さのほとんどのカーネルシステムコールのラッパーを提供します。

およびのように、これらのラッパーが非常に薄くなる場合がsysread()ありsyswrite()ます。これらは、それぞれread(2)ととほぼ同等です。write(2)

他のシステムコールは、ソケットI / Oのものなど、より厚いレイヤーの背後に隠されます。UNIXSocket.recv()呼び出しが「システムコールの呼び出し」として正確にカウントされるかどうかはわかりません。あるレベルでは、まさにそれが起こりますが、あなたと実際のシステムコールの間にRubyとCのコードがどれだけあるかは誰にもわかりません。

次に、標準のRuby APIにまったく含まれていないシステムコールがあります。これは、のように、あまり意味がないためと考えられますmmap(2)。そのシステムコールはすべて、メモリへの生のポインタに関するものです。これは、最初にRubyのような言語を使用することで回避することを選択したものです。たまたまサードパーティのRubymmapモジュールがありますが、Cからタップできるすべてのパワーを実際に提供するわけではありません。

上記syscall()のコメントで指摘されているインターフェイスMatも同様の話です。理論的には、カーネル内の任意のシステムコールを呼び出すことができます。ただし、ポインタを処理したり、構造体のメモリにデータを正確に配置したりする機能がない場合、有用な呼び出しを行う機能はかなり制限されます。

システムコールを試してみたい場合は、Cを学びましょう。近道はありません。

于 2012-09-15T15:29:59.380 に答える
0

Eric Wong は、Ruby でのシステムレベル プログラミングのメーリング リストを開始しました。現在はあまり活発ではありませんが、http://librelist.com/browser/usp.ruby/からアクセスできます。

于 2012-09-16T01:37:08.177 に答える