我想玩Unix系统调用,最好是使用Ruby。我怎么能这样做?
我听说过Fiddle,但我不知道从哪里开始/我应该将哪个C库附加到它?
答案 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)