Создать именованный канал в Ruby

Я пытаюсь создать именованный канал внутри Ruby. Помимо использования команды system (system("mkfifo #{pipe_name}")), есть ли встроенная функция Ruby, позволяющая мне это сделать?


person Yang Guan    schedule 22.06.2013    source источник
comment
Есть ли какие-либо преимущества в функции Ruby по сравнению с использованием системной команды?   -  person Velizar Hristov    schedule 03.07.2015


Ответы (1)


Текущие версии Ruby (начиная с 2.3.0) теперь имеют собственный Файл::mkfifo:

File.mkfifo('pipe_name')

Старый ответ для старых версий Ruby:

Я не верю, что есть что-то полностью нативное, но есть жем mkfifo.

Установите так:

gem install mkfifo

Затем используйте так:

require "mkfifo"
File.mkfifo('pipe_name')
person Darshan Rivka Whittle    schedule 22.06.2013
comment
Также существует универсальное решение github.com/shurizzle/ruby-fifo - person Casper; 22.06.2013
comment
Если присмотреться, эти две жемчужины принадлежат одному и тому же автору. mkfifo был создан 11 месяцев назад, а ruby-fifo — 3 года назад, но я не уверен, какой из них лучше. mkfifo связывает fifo с классом File, поэтому fifo можно использовать как обычный файл. - person Yang Guan; 22.06.2013
comment
Как я вижу, ruby-fifo зависит от ruby-mkfifo. - person Nakilon; 29.07.2017
comment
Добавлен собственный File::mkfifo. в Руби 2.3.0. - person Steve; 28.03.2018
comment
@Steve Спасибо, что сообщили мне — я обновил свой ответ. - person Darshan Rivka Whittle; 28.03.2018
comment
Собственный метод не реализован в Windows. github.com/shurizzle/ruby-fifo говорит, что он кроссплатформенный. - person Benjineer; 08.03.2019