LINUX.ORG.RU

Подходит ли libev для serial port

 , , ,


0

2

Здравствуйте. Простите что снова пристаю к вам с последовательным портом

Запутался в libevent, libev, libeio, libuv.

Хочется сокеты, последовательные порты и таймеры в одном event loop.

В libuv пишут, что файловый io у них через thread pool, что беспокоит. Ведь /dev/ttyS0, видимо придется подключать именно через fs хэндлер.

Про libevent везде пишут, что он большой и с изъянами архитектуры. Не стал в нем копаться (хотя програм, его использующих довольно много)

На замену libevent предлагается libev (хотя из програм, его использущих в моем арчике - только i3wm и китайский мессенджер)

Кроме того, автор libev разрабатывает еще и libeio. Эдакий libev специально для файлов.

И вот начиная с этого момента я в замешательстве.

  • К чему отнести serial port - к файлам или, скорее, к сокетам?
  • Что лучше использовать для serial port - libeio или ev_io вотчер из libev
  • Подходит ли вообще libev или libeio для serial ports?
  • Или может взять libevent?
★★★★★

Последнее исправление: makoven (всего исправлений: 3)

Упрощенно, если нет диска, с файловым хендлером можно использовать libev

anonymous
()
Ответ на: комментарий от makoven

мне по русски писать? /dev/* не является как таковым регулярным файлом, и по этому его дескриптор можно пуллить./dev/video* /dev/tty* итд итп

anonymous
()
Ответ на: комментарий от itn

itn тоже файл на диске где хостится lor, стереть бы тебя. а по теме лучше читать вопрос и ответы на него, а не бегать и спорить на ответы, не понимая вопросов. так ясно?

anonymous
()
Ответ на: комментарий от anonymous

/dev/* не является как таковым регулярным файлом, и по этому его дескриптор можно пуллить

А вот libuv почему-то считает, что character device «пуллить» нельзя. Считает, что это файл и делает тхреад пул:

  if (S_ISCHR(s.st_mode))
    return UV_FILE;  /* XXX UV_NAMED_PIPE? */

Или может я что-то не догоняю

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

мне это надо? гуглите
Use standard Unix system calls read(2) and write(2) for reading from, and writing to the serial interface. Related system calls like readv(2) and writev(2) can be used, too. Multiple I/O techniques, like blocking, non-blocking, asynchronous I/O (select(2) or poll(2), or signal-driven I/O (SIGIO signal)) are also possible. The selection of the I/O technique is an important part of the application's design. The serial I/O needs to work well with other kinds of I/O performed by the application, like networking, and must not waste CPU cycles.
https://en.wikibooks.org/wiki/Serial_Programming/termios

anonymous
()
Ответ на: комментарий от anonymous

Я примерно так и думал. Видимо, это в libuv что-то намутили. Так же как и вместо любого tty открывается другой tty, с фиксированным именем. Уж не знаю, насколько такая практика распространена:

if (type == UV_TTY) {
  r = uv__open_cloexec("/dev/tty", O_RDWR);
makoven ★★★★★
() автор топика
Последнее исправление: makoven (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.