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

And*_*rei 1 ruby system-calls

我想使用 Unix 系统调用,最好是从 Ruby 进行。我怎样才能这样做呢?

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

War*_*ung 5

我认为“交互式”你的意思是通过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吧。没有捷径。