powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Знатокам С для Linux Unix
13 сообщений из 13, страница 1 из 1
Знатокам С для Linux Unix
    #33881461
Guest__C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем
Я не большой знаток С для Linux, сейчас разбираюсь с чужой программой.
Подскажите что может означать следующий код внутри потока:
Код: plaintext
1.
2.
3.
4.
5.
6.
  int fd_set rfds; struct timeval tv;
....
  FD_ZERO (&rfds);  FD_SET ( 2 , &rfds);
  tv.tv_sec =  0 ; tv.tv_usec =  20000 ;
  select( 2 , &rfds, NULL, NULL, &tv);
....
Если это просто задержка, то почему именно так сделано ?
Если блокировка какого-то файла то какого (вроде бы FD_ZERO очищает rfds)?
...
Рейтинг: 0 / 0
Знатокам С для Linux Unix
    #33881496
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ожидание на массиве сокетов с заданным таймаутом
...
Рейтинг: 0 / 0
Знатокам С для Linux Unix
    #33881533
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest__CДобрый день всем
Я не большой знаток С для Linux, сейчас разбираюсь с чужой программой.
Подскажите что может означать следующий код внутри потока:
Код: plaintext
1.
2.
3.
4.
5.
6.
  int fd_set rfds; struct timeval tv;
....
  FD_ZERO (&rfds);  FD_SET ( 2 , &rfds);
  tv.tv_sec =  0 ; tv.tv_usec =  20000 ;
  select( 2 , &rfds, NULL, NULL, &tv);
....
Если это просто задержка, то почему именно так сделано ?
Если блокировка какого-то файла то какого (вроде бы FD_ZERO очищает rfds)?

Очищается rfds; добавляется 2-й поток (не помню точно, но вродебы это поток ошибок)
ожидать о секуд; 20мс;

Здесь далее ошибка. в селекте 1-й параметр должен быть как минимум на единичку больше, чем максимальное значение идентификатора потока в списке rfds, т.е. 2+1, второй параметр означает, что проверяются потоки на наличие данных для чтения из них. Ну а последний - максимальное время сикоко ждать.
...
Рейтинг: 0 / 0
Знатокам С для Linux Unix
    #33881994
Guest__C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, вроде разобрался, похоже все таки на ожидание. Чтение из stderr там не предполагается.
По поводу первого параметра у select:
Из описания libc
int select (int nfds,fd_set *read_fds, fd_set *write_fds,fd_set *except_fds, struct timeval *timeout)

Функция выбора проверяет только первые nfds описателей файла.
Обычно она передает FD_SETSIZE как значение этого аргумента.
так что 2-ка это нормально.
...
Рейтинг: 0 / 0
Знатокам С для Linux Unix
    #33882008
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит разные версии libc.

man
SELECT(2) Linux Programmer’s Manual SELECT(2)

НАЗВАНИЕ
select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - многопоточный синхронный ввод-вывод

СИНТАКСИС
/* В соответствие с POSIX 1003.1-2001 */
#include <sys/select.h>

/* В соответствие с более ранними стандартами */
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>

int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

int pselect(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const
sigset_t * sigmask);

FD_CLR(int fd, fd_set *set);
FD_ISSET(int fd, fd_set *set);
FD_SET(int fd, fd_set *set);
FD_ZERO(fd_set *set);

ОПИСАНИЕ
Функции select и pselect ждут изменения статуса нескольких файловых описателей.

Эти функции идентичны, за исключением 3-х отличий между ними:

(1) Функция select использует время ожидания, которое задано в структуре struct timeval (с секундами и микросек
ундами), тогда как pselect использует struct timespec (с секундами и наносекундами).

(2) Функция select может обновить параметр timeout, который показывает сколько времени прошло. Функция pselect
не изменяет этот параметр.

(3) Функция select не имеет параметра sigmask, и т.о. ведет себя также как функция pselect вызванная с этим пар
аметром, установленным в NULL.

Отслеживаются 3 независимых набора описателей. Те, что перечислены в readfds, будут отслеживаться для того, чтобы
обнаружить появление символов, доступных для чтения (говоря более точно, чтобы узнать, не будет либлокировано чтен
ие; описатель файла также будет указыватьна конец файла); те описатели, которые указаны в writefds, будут отслежив
аться для того, чтобы узнать, не заблокирован ли процесс записи; те же, что указаны в параметре exceptfds, будут о
тслеживаться для обнаружения исключительных ситуаций. При возвратеиз функции наборы описателей модифицируются, что
бы показать, какие описателифактически изменили свой статус.

Для манипуляций наборами существуют четыре макроса: FD_ZERO, очищающий набор; FD_SET и FD_CLR добавляют заданный о
п исатель к набору или удаляют его из набора; FD_ISSET проверяет, является ли описатель частью набора; этот макрос
полезенпосле возврата из функции select.

n на единицу больше самого большого номера описателей из всех наборов.

timeout - это верхняя граница времени, которое пройдет перед возвратом из select. Можно использовать нулевое знач
ение, и при этом select завершится немедленно. Если timeout равен NULL (нет времени ожидания), то select будет ожи
дать изменений неопределенное время.

sigmask - это указатель на маску сигнала (см. sigprocmask(2)); если он не равняется NULL, то pselect сначала заме
няет текущую маску сигнала на ту, на которую указывает sigmask, затем вызывается функция "select" и после этого во
...
Рейтинг: 0 / 0
Знатокам С для Linux Unix
    #33882019
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня glibc-2.3.3-27.1. Работает так как написано в мане.
...
Рейтинг: 0 / 0
Знатокам С для Linux Unix
    #33882031
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest__CЧтение из stderr там не предполагается.

А что за 2-ка в FD_SET?
...
Рейтинг: 0 / 0
Знатокам С для Linux Unix
    #33883918
Guest__C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkhУ меня glibc-2.3.3-27.1. Работает так как написано в мане.
Я смотрел описание GNU glibc аж от 1994г. Более нормального пока найти не смог.
Если что посоветуете (кроме man :) ) буду очень признателен.
AkhА что за 2-ка в FD_SET?
2 - дескриптор stderr
из того же GNU glibc
glibc
STDIN_FILENO
Эта макрокоманда имеет значение 0, которое является дескриптором
файла для стандартного ввода.
STDOUT_FILENO Эта макркоманда имеет значение 1, которое является
дескриптором файла для стандартного вывода.
STDERR_FILENO Эта макркоманда имеет значение 2, которое является
дескриптором файла для стандартного вывода ошибки.
...
Рейтинг: 0 / 0
Знатокам С для Linux Unix
    #33884382
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest__C AkhУ меня glibc-2.3.3-27.1. Работает так как написано в мане.
Я смотрел описание GNU glibc аж от 1994г. Более нормального пока найти не смог.
Если что посоветуете (кроме man :) ) буду очень признателен.


Не кривя душой, скажу что кроме мана не читал ничего кроме отдельных средств. :)

Можешь посмотреть, например . Для листания прибавлять по единичке к урлу.
...
Рейтинг: 0 / 0
Знатокам С для Linux Unix
    #33886330
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest__CЯ смотрел описание GNU glibc аж от 1994г. Более нормального пока найти не смог.
Если что посоветуете (кроме man :) ) буду очень признателен.
А чего его искать???
Здесь доки на компилятор: http://gcc.gnu.org/
Здесь на саму библиотеку: http://www.gnu.org/software/libc/
...
Рейтинг: 0 / 0
Знатокам С для Linux Unix
    #33887144
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего это действитль простое ожидание. Но не факт. Stderr мог запросто быть закрыт. а потом кто-то открыл чего-нибудь чтоб почитать, чудаков много, особенно ежели прграмка-демон.
...
Рейтинг: 0 / 0
Знатокам С для Linux Unix
    #33887987
Guest__C
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за ответы и за ссылки, буду разбираться дальше, пока решил остановится на варианте что это задержка.
...
Рейтинг: 0 / 0
Знатокам С для Linux Unix
    #33888217
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest__CВсем спасибо за ответы и за ссылки, буду разбираться дальше, пока решил остановится на варианте что это задержка.

Код: plaintext
usleep( 20000 );
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Знатокам С для Linux Unix
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]