如何以交互方式调用Unix系统调用?

时间:2012-09-15 12:44:11

标签: system-calls ruby

我想玩Unix系统调用,最好是使用Ruby。我怎么能这样做?

我听说过Fiddle,但我不知道从哪里开始/我应该将哪个C库附加到它?

2 个答案:

答案 0 :(得分:4)

我以#34;交互式地假设"你的意思是通过irb

像Ruby这样的高级语言将为大多数内核系统调用提供不同厚度的包装。

有时这些包装器会非常薄,就像sysread()syswrite()一样。这些或多或少分别等同于read(2)write(2)

其他系统调用将隐藏在较厚的图层后面,例如socket I/O stuff。我不知道呼叫UNIXSocket.recv()是否算作#34;呼叫系统调用"精确。在某种程度上,这恰恰发生了什么,但谁知道你和实际系统调用之间有多少Ruby和C代码。

然后,那些系统调用根本不在标准的Ruby API中,很可能是因为它们没有多大意义,比如mmap(2)。那个系统调用都是关于内存的原始指针,你首先要选择使用像Ruby这样的语言来避免这种情况。碰巧有a third party Ruby mmap module,但它真的不会给你从C中获得的所有力量。

上面评论中指出的syscall()接口Mat是一个类似的故事:从理论上讲,它允许你调用内核中的任何系统调用。但是,如果你没有能力处理指针,将数据准确地存储在内存中用于结构等,那么你进行有用调用的能力将会非常有限。

如果您想玩系统调用,请学习C.没有捷径。

答案 1 :(得分:0)

Eric Wong在Ruby中开始了系统级编程的邮件列表。它现在不是非常活跃,但您可以在http://librelist.com/browser/usp.ruby/处找到它。