LINUX.ORG.RU

select() Уточнение работы


0

0

День добрый
Уточните поведение select, не могу прояснить для себя пару нюансов.

У меня есть набор дескрипторов для слежения, например, на чтение.

Я вызываю select с таймаутом.
Какие из утверждений будут истинными:
1. По истечении времени таймаута select прекратит выполнение и возвратит количество "готовых" дескрипторов.
2. select возвратит управление немедленно (не дожидаясь таймаута), если ХОТЯ БЫ ОДИН из набора дескрипторов будет готов.
3. select возвратит управление немедленно (не дожидаясь таймаута) только если ВСЕ ДЕСКРИПТОРЫ будут готовы на чтение.
4. При вызове с таймаутом (!=NULL) select всегда будет ожидать окончание таймаута, даже если все дескрипторы уже "готовы".

Пусть таймаут=NULL (бесконечное ожидание)
Какие из утверждений будут истинными:
1. select возвратит управление если хотя бы один дескриптор будет готов.
2. select будет "висеть" до тех пор, пока ВСЕ опрашиваемые дескрипторы не будут готовы.

Спасибо


Re: select() Уточнение работы

1. При истечении таймаута select вернёт 0. Если хоть один дескриптор готов - то это уже будет не истечение таймаута.
2. true
3. false
4. false

Без таймаута:
1. true
2. false

P.S. Возможно я где-то ошибся, man 2 select разбирается в теме гораздо лучше меня =).

Deleted ()
Ответ на: Re: select() Уточнение работы от tailgunner

Re: select() Уточнение работы

Спасибо большое. Мне нужно эмулировать поведение select для файлов и каналов.

poll() в этой системе отсутствует. select() может применяться только к сокетам Взамен, правда,есть много других вкусностей. Что за ось - не скажу :)

Alphaer ()
Ответ на: Re: select() Уточнение работы от Alphaer

Re: select() Уточнение работы

> poll() в этой системе отсутствует. select() может применяться только к сокетам

...и pty/tty.

> Взамен, правда,есть много других вкусностей. Что за ось - не скажу :)

И так понятно, что это RTEMS :)

tailgunner ★★★★★ ()

Re: select() Уточнение работы

> По истечении времени таймаута select прекратит выполнение и возвратит количество "готовых" дескрипторов

нет, он просто отвалится.

> select возвратит управление немедленно (не дожидаясь таймаута), если ХОТЯ БЫ ОДИН из набора дескрипторов будет готов.

да

> При вызове с таймаутом (!=NULL) select всегда будет ожидать окончание таймаута, даже если все дескрипторы уже "готовы".

нет.

> select возвратит управление если хотя бы один дескриптор будет готов.

да.

Rastafarra ★★★★ ()

Re: select() Уточнение работы

Спасибо, друзья. Теперь уложилось в башке

Alphaer ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.