Ruby - IO # ioctl выдает ошибку диапазона в 1.9.3, но не 1.9.1 для 32-битной - PullRequest
1 голос
/ 07 марта 2012
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>'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...