0

我想玩 Unix 系统调用,最好是来自 Ruby。我该怎么做?

我听说过 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 之类的语言来避免这种情况。碰巧有一个第三方 Ruby mmap 模块,但它真的不会为您提供可以从 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 回答