|
|
|
Знатокам С для Linux Unix
|
|||
|---|---|---|---|
|
#18+
Добрый день всем Я не большой знаток С для Linux, сейчас разбираюсь с чужой программой. Подскажите что может означать следующий код внутри потока: Код: plaintext 1. 2. 3. 4. 5. 6. Если блокировка какого-то файла то какого (вроде бы FD_ZERO очищает rfds)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 10:55 |
|
||
|
Знатокам С для Linux Unix
|
|||
|---|---|---|---|
|
#18+
Это ожидание на массиве сокетов с заданным таймаутом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 11:04 |
|
||
|
Знатокам С для Linux Unix
|
|||
|---|---|---|---|
|
#18+
Guest__CДобрый день всем Я не большой знаток С для Linux, сейчас разбираюсь с чужой программой. Подскажите что может означать следующий код внутри потока: Код: plaintext 1. 2. 3. 4. 5. 6. Если блокировка какого-то файла то какого (вроде бы FD_ZERO очищает rfds)? Очищается rfds; добавляется 2-й поток (не помню точно, но вродебы это поток ошибок) ожидать о секуд; 20мс; Здесь далее ошибка. в селекте 1-й параметр должен быть как минимум на единичку больше, чем максимальное значение идентификатора потока в списке rfds, т.е. 2+1, второй параметр означает, что проверяются потоки на наличие данных для чтения из них. Ну а последний - максимальное время сикоко ждать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 11:16 |
|
||
|
Знатокам С для Linux Unix
|
|||
|---|---|---|---|
|
#18+
Спасибо, вроде разобрался, похоже все таки на ожидание. Чтение из 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-ка это нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 13:04 |
|
||
|
Знатокам С для Linux Unix
|
|||
|---|---|---|---|
|
#18+
Значит разные версии 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" и после этого во ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 13:09 |
|
||
|
Знатокам С для Linux Unix
|
|||
|---|---|---|---|
|
#18+
У меня glibc-2.3.3-27.1. Работает так как написано в мане. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 13:13 |
|
||
|
Знатокам С для Linux Unix
|
|||
|---|---|---|---|
|
#18+
Guest__CЧтение из stderr там не предполагается. А что за 2-ка в FD_SET? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 13:17 |
|
||
|
Знатокам С для Linux Unix
|
|||
|---|---|---|---|
|
#18+
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, которое является дескриптором файла для стандартного вывода ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 05:25 |
|
||
|
Знатокам С для Linux Unix
|
|||
|---|---|---|---|
|
#18+
Guest__C AkhУ меня glibc-2.3.3-27.1. Работает так как написано в мане. Я смотрел описание GNU glibc аж от 1994г. Более нормального пока найти не смог. Если что посоветуете (кроме man :) ) буду очень признателен. Не кривя душой, скажу что кроме мана не читал ничего кроме отдельных средств. :) Можешь посмотреть, например . Для листания прибавлять по единичке к урлу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 10:42 |
|
||
|
Знатокам С для Linux Unix
|
|||
|---|---|---|---|
|
#18+
Guest__CЯ смотрел описание GNU glibc аж от 1994г. Более нормального пока найти не смог. Если что посоветуете (кроме man :) ) буду очень признателен. А чего его искать??? Здесь доки на компилятор: http://gcc.gnu.org/ Здесь на саму библиотеку: http://www.gnu.org/software/libc/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 19:13 |
|
||
|
Знатокам С для Linux Unix
|
|||
|---|---|---|---|
|
#18+
Скорее всего это действитль простое ожидание. Но не факт. Stderr мог запросто быть закрыт. а потом кто-то открыл чего-нибудь чтоб почитать, чудаков много, особенно ежели прграмка-демон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2006, 19:57 |
|
||
|
Знатокам С для Linux Unix
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за ответы и за ссылки, буду разбираться дальше, пока решил остановится на варианте что это задержка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2006, 05:00 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=342&tid=2030761]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 426ms |

| 0 / 0 |
