2012-09-15 60 views
0

我想玩Unix系統調用,最好是從Ruby。我該怎麼做?如何交互式地調用Unix系統調用?

我聽說過小提琴,但我不知道從哪裏開始/我應該將哪個C庫附加到它?

+1

http://apidock.com/ruby/Kernel/syscall?不知道你想直接與系統調用進行交互。 – Mat

回答

4

我通過「交互式」假設你的意思是通過irb

像Ruby這樣的高級語言將爲大多數內核系統調用提供不同厚度的包裝。

偶爾這些包裝將會非常薄,如sysread()syswrite()。這些分別大致等同於read(2)write(2)

其他系統調用將隱藏在較厚的圖層後面,例如socket I/O stuff。我不知道調用UNIXSocket.recv()是否恰當地稱爲「調用系統調用」。在某種程度上,這正是發生的情況,但是誰知道你和實際的系統調用之間有多少Ruby和C代碼。

然後有一些系統調用根本不在標準的Ruby API中,很可能是因爲它們沒有很大的意義,比如mmap(2)。這個系統調用全是關於內存的原始指針,你首先通過使用像Ruby這樣的語言選擇避免。有恰好是a third party Ruby mmap module,但它真的不打算給你,你可以從C.挖掘

syscall()接口墊在評論中指出所有的力量上面是一個類似的故事:從理論上講,它可以讓你調用任何系統調用內核。但是,如果你不具備處理指針的能力,爲結構等內存準確地存儲數據,那麼進行有用調用的能力將非常有限。

如果你想玩系統調用,學習C.沒有捷徑。