Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 1
Регистрация: 12.09.2013
Сообщений: 48

Системный вызов epoll_ctl: Bad file descriptor

05.10.2014, 15:10. Показов 3328. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа выдает epoll_ctl: Bad file descriptor. Помогите разобраться что не так делаю
C
1
2
3
4
5
6
7
8
9
10
int fd, epfd;
fd = open ("file", O_RDONLY);
struct epoll_event event;
event.data.fd = fd;
event.events = EPOLLIN | EPOLLOUT;
ret = epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event);
if(ret) {
    perror("epoll_ctl");
    return 1;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.10.2014, 15:10
Ответы с готовыми решениями:

bad file descriptor
помогите пожалста! работаю с сокетами под убунту когда вызывается функция send(sock, get, strlen(get), 0); ...

fopen не читает из URL - Warning: fopen('http://www....','r') - Bad file descriptor in .....gethtml.php on line 16
Как известно с помощью fopen можно прочитать данные не только из файла но и из URL. Проблема в том что обращаясь через прокси я получаю...

bad class file: C:Program FilesJavajre1.5.0_02lib t.jar(java/lang/Object.class) class file has wrong version 49.0, should be 48.0
написал тестовый td_jsp.jsp фаил ->> <html> <head><title>JSP test</title></head> <body> <p>JSP test</p> </body> ...

5
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
05.10.2014, 15:24
man epoll
Прежде, чем что-то делать с пулом, его надо для начала создать(epoll_create).
0
 Аватар для TheAthlete
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 575
06.10.2014, 15:44
сначала нужно задать контекст опроса событий с помощью функции epoll_create1:
C
1
int epfd = epoll_create1(0);
0
0 / 0 / 1
Регистрация: 12.09.2013
Сообщений: 48
06.10.2014, 18:38  [ТС]
теперь ошибка epoll_ctl: Operation not permitted. Что это означает и как исправить?
0
 Аватар для TheAthlete
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 575
06.10.2014, 19:25
Суть в том, что epoll не работает с обычными файлами, в результате errno возвращает ошибку EPERM (см. man epoll_ctl). Вот код, который проверяет данную ошибку:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/epoll.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
 
int main() {
  int fd = open ("test2.txt", O_RDONLY);
  int epfd = epoll_create1(0);
 
  struct epoll_event event;
  event.data.fd = fd;
  event.events = EPOLLIN | EPOLLOUT;
 
  int ret = epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event);
  if (errno == EPERM) {
    printf("Файл назначения fd не поддерживает epoll\n");
    return 1;
  }
  if(ret) {
    perror("epoll_ctl");
    return 1;
  }
 
  return 0;
}
epoll поддерживает следующие дескрипторы файлов: pipe, FIFO, socket, POSIX message queue, inotyfy instance, terminal, device. В качестве файлового дескриптора не может быть использован обычный файл или директория.
Пример работы со стандартным выводом (stdout):

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/epoll.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
 
#define MAX_EVENTS 64
 
int main() {
  int epfd = epoll_create1(0);
 
  struct epoll_event event;
  /*event.data.fd = STDIN_FILENO;*/
  event.data.fd = STDOUT_FILENO;
  event.events = EPOLLIN | EPOLLOUT;
 
  int ret = epoll_ctl(epfd, EPOLL_CTL_ADD, STDOUT_FILENO, &event);
  if (errno == EPERM) {
    printf("Файл назначения fd не поддерживает epoll\n");
    return 1;
  }
  if(ret) {
    perror("epoll_ctl");
    return 1;
  }
 
  struct epoll_event *events = malloc(sizeof(struct epoll_event) * MAX_EVENTS);
  int nr_events = epoll_wait(epfd, events, MAX_EVENTS, 0);
  if (nr_events < 0) {
    perror("epoll_wait");
    free(events);
    return 1;
  }
 
  if (event.events & EPOLLOUT) 
    printf("stdout is writable\n");
 
 
  free(events);
 
  return 0;
}
1
0 / 0 / 1
Регистрация: 12.09.2013
Сообщений: 48
06.10.2014, 20:36  [ТС]
как будет работать с EPOLL_CTL_DEL и EPOLL_CTL_MOD ?
выводит ошибку epoll_ctl: No such file or directory
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.10.2014, 20:36
Помогаю со студенческими работами здесь

Ошибка при линковке "fatal bad object file record in module near module file offset 0x0000032D"
Добрый вечер, форумчане:) Обращаюсь к знающим ассемблер,а именно TASM. Код программы есть. После команды tasm lab создается obj -файл....

553 bad file name
553 bad file name такую вот ошибку выдает при закачке фотографии в одну из деректорий сайта. хостер narod.ru, место вроде есть. Что не так?...

Bad class file
При компиляции ругается на Note. import polymorphism.music.Note; пишет вот это

ошибка 52 Bad file name or number
Доброго времени суток! Помогите разобраться, почему возникает ошибка? Sub proba() Dim FName1 As String Dim FName2 As String ...

Ошибка Bad object file
Доброго времени суток, уважаемые форумчане. Возникла такая проблема: ...имеется листинг программы (приводится ниже; файл lw4_1 в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru