ruby-1.9.1-p243 :008 > a,b = IO.pipe
=> [#<IO:0x2010670>, #<IO:0x2010654>]
ruby-1.9.1-p243 :009 > a.ioctl(0x80000000, "\x00\x00")
Errno::ENOTTY: Inappropriate ioctl for device
from (irb):9:in `ioctl'
from (irb):9
from /Users/dlampa/.rvm/rubies/ruby-1.9.1-p243/bin/irb:16:in `<main>'
Это сработало бы, если бы объект ввода-вывода был соответствующим устройством, а команда действовала.
ruby-1.9.3-p0 :022 > a,b = IO.pipe
=> [#<IO:fd 9>, #<IO:fd 10>]
ruby-1.9.3-p0 :023 > a.ioctl(0x80000000, "\x00\x00")
RangeError: bignum too big to convert into `long'
from (irb):23:in `ioctl'
from (irb):23
from /Users/dlampa/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>'
В MacOSX 10.6.8
Я предполагаю, чточто-то делать с битовой подписью (может быть), и упаковывать и распаковывать вещи как подписанные и без знака, но, похоже, ничто не мешает 1.9.3 выдать эту ошибку диапазона.Конечно, в 64-битных реализациях проблем нет.Я полностью сбит с толку.Может кто-нибудь объяснить, почему это происходит, и, возможно, предложить обходной путь?
Редактировать: команда также работает в 1.9.2-p290, поэтому определенно произошло изменение с 1.9.2 на 1.9.3
ruby-1.9.2-p290 :001 > a,b = IO.pipe
=> [#<IO:fd 3>, #<IO:fd 4>]
ruby-1.9.2-p290 :002 > a.ioctl(0x80000000, "\x00\x00")
Errno::ENOTTY: Inappropriate ioctl for device
from (irb):2:in `ioctl'
from (irb):2
from /Users/dlampa/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>'