Страница 1 из 1

Select()

Добавлено: 2008-09-05 15:03:52
Pal
Здравствуйте.
У меня непонятки с функцией select().

Код программы:

Код: Выделить всё

#include <fcntl.h>
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>

#define TIMEOUT 2 
#define BUF_LEN 1024

int main(int argc, char *argv[])
{
int fd; 
struct timeval tv; 
fd_set readfds;
fd_set writefds;
int ret;

fd = open (argv[1], O_RDONLY);
printf("Дескриптор файла: %d\n", fd);

FD_ZERO(&readfds);
FD_SET(fd, &readfds);

tv.tv_sec = TIMEOUT;
tv.tv_usec = 0;

ret = select (fd +1, 
              &readfds,
              NULL,
              NULL,
              &tv);
if (ret = -1) {
        printf ("Ошибка\n");
        printf("Функция select вернула:%d\n", ret);
        perror("select");
        return 1;
} else if (!ret) {
                   printf ("Истёк тайм аут: %d\n", TIMEOUT);
                   return 0;
        }
printf ("К считыванию готово: %d файлов\n", ret);
return 0;

}
Вот результат работы:

Код: Выделить всё

Дескриптор файла: 3
Ошибка
Функция select вернула:-1
select: Success
Если в качестве цели ей подсовывать не аргумент а STDIN_FILENO, происходит тоже самое.
Особенно умиляет эта строка

Код: Выделить всё

 select: Success
Компилится и проверяется на Linux 2.6.24-21-generic
Помогите, что я не понимаю?

Re: Select()

Добавлено: 2008-09-05 15:48:42
Pal
Проблема тут, опечатался)))

Код: Выделить всё

if (ret = -1)
надо так
if (ret == -1)

Re: Select()

Добавлено: 2008-09-06 11:10:52
Fastman
Pal писал(а):Проблема тут, опечатался)))

Код: Выделить всё

if (ret = -1)
надо так
if (ret == -1)

Стандартная ошибка :)
Хотя у меня палец неосознанно двойной клик на равно делает автоматом при описании в if :)

Re: Select()

Добавлено: 2008-09-10 17:03:14
Pal
Я подобных ошибок очень много допускаю=) Могу словарь написать по таким ошибкам. Кодить начал недавно.