Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: отсутствуют хидеры /usr/include/sys  (Прочитано 1355 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн autrich

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
отсутствуют хидеры /usr/include/sys
« : 10 Апрель 2013, 17:53:11 »
Добрый день. Прошу сообщество о помощи. Нужен хидер poll.h
В принципе, он есть в каталоге /usr/include, но он ссылается на sys/poll.h:
#include <sys/poll.h>Проблема в том, что каталог sys в /usr/include отсутствует как таковой.
Попытка установить хидеры командой не дает ровным счетом ничего:
autrich@autrich-R518:~$ sudo apt-get install linux-headers-3.5.0-27-generic
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Уже установлена самая новая версия linux-headers-3.5.0-27-generic.
Следующие пакеты устанавливались автоматически и больше не требуются:
  libclang-common-dev libjavascriptcoregtk-1.0-0 libllvm3.0 libunique-1.0-0
  libwebkitgtk-1.0-0 libwebkitgtk-1.0-common llvm-3.0 llvm-3.0-dev
  llvm-3.0-runtime
Для их удаления используйте «apt-get autoremove».
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Есть подозрение, что у меня не установлен какой-то модуль.
В принципе, можно сделать симлинки из других папок, в данном случае, например, из /usr/include/i386-linux-gnu/sys, но ведь не на каждый файл...
Как можно добавить заголовочные файлы в /usr/include, может, библиотеку поставить нужно какую-то? Заранее спасибо за ответы.

Оффлайн kupamaan

  • Любитель
  • *
  • Сообщений: 52
    • Просмотр профиля
Re: отсутствуют хидеры /usr/include/sys
« Ответ #1 : 10 Апрель 2013, 18:02:04 »
Просто напиши:
#include <poll.h>хедер уже ссылается на:
/usr/include/i386-Linux-gnu/sys.


Оффлайн quiet_readonly

  • Участник
  • *
  • Сообщений: 133
    • Просмотр профиля
Re: отсутствуют хидеры /usr/include/sys
« Ответ #2 : 10 Апрель 2013, 18:16:36 »
Есть полезная утилита apt-file, если правильно помню, по умолчанию не установлена. Может показать, в каких пакетах есть заданный файл.

apt-file search sys/poll.h

Оффлайн autrich

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: отсутствуют хидеры /usr/include/sys
« Ответ #3 : 10 Апрель 2013, 23:35:18 »
Цитировать
хедер уже ссылается на:

/usr/include/i386-Linux-gnu/sys

но как? там ведь символической ссылки нет, а внутри файла лишь одна строка:

#include <sys/poll.h>
Цитировать
Есть полезная утилита apt-file
Спасибо, утилитка действительно очень удобная.
Я правильно понимаю, мне нужно скопировать найденный файл в /usr/include/sys?
« Последнее редактирование: 11 Апрель 2013, 00:21:32 от autrich »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: отсутствуют хидеры /usr/include/sys
« Ответ #4 : 11 Апрель 2013, 08:23:35 »
autrich,
Не трогай системные каталоги!
Ничего никуда копировать не надо.
Хочешь разобраться - разбирайся, систему не ломай!
А то потом от тебя воя будет, что ничего не работает на весь форум.

sudo apt-get install build-essentialНеобходимый и достаточный минимум чтобы заниматься разработкой сетевых приложений.

Вот нашел на просторах сети
Код: C
  1. #define _GNU_SOURCE
  2. #include <errno.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <signal.h>
  7. #include <unistd.h>
  8. #include <poll.h>
  9. #include <sys/types.h>
  10. #include <sys/socket.h>
  11. #include <netinet/in.h>
  12. #include <netdb.h>
  13. #include <arpa/inet.h>
  14.  
  15. int ls;
  16.  
  17. void cleanup(int shut, int s, int howmany)
  18. {
  19.     int retval;
  20.  
  21.     /*
  22.      * Shutdown and close sock1 completely.
  23.      */
  24.     if (shut) {
  25.         retval = shutdown(s, howmany);
  26.         if (retval == -1)
  27.             perror("shutdown");
  28.     }
  29.     retval = close(s);
  30.     if (retval)
  31.         perror("close");
  32. } /* end cleanup*/
  33.  
  34. void sighandler(int sig)
  35. {
  36.     if (sig == SIGINT) {
  37.         cleanup(0, ls, 1);
  38.         exit(EXIT_SUCCESS);
  39.     }
  40. }
  41.  
  42. void declsighandler()
  43. {
  44.     struct sigaction action;
  45.     sigemptyset(&action.sa_mask);
  46.     sigaddset(&action.sa_mask, SIGINT);
  47.     action.sa_flags = 0;
  48.     action.sa_handler = sighandler;
  49.     sigaction(SIGINT, &action, NULL);
  50. }
  51.  
  52. /*--------------------------------------------------------------------*/
  53. int main(int argc, char **argv)
  54. {
  55.     char message[BUFSIZ];
  56.     struct sockaddr_in s_name; /* Address struct for s.*/
  57.     int opt = 1;
  58.     int retval; /* helpful for debugging */
  59.     socklen_t namelength;
  60.     int atmark;
  61.     struct pollfd *fds = NULL;
  62.     nfds_t nfds;
  63.     int ret;
  64.  
  65.     /*
  66.      * Check input parameters.
  67.      */
  68.     if (argc != 2) {
  69.         printf("Usage: server portnumber.\n");
  70.         exit(EXIT_FAILURE);
  71.     }
  72.  
  73.     /*
  74.      * Open socket 2: AF_INET, SOCK_STREAM.
  75.      */
  76.     if ((ls = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
  77.         perror("socket");
  78.         exit(EXIT_FAILURE);
  79.     }
  80.  
  81.     if (setsockopt(ls, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof opt) < 0) {
  82.         printf("setsockopt (SO_RESUSEADDR): %s\r\n", strerror(errno));
  83.         exit(EXIT_FAILURE);
  84.     }
  85.  
  86.     /*
  87.      * Fill in the name & address structure for socket 2.
  88.      */
  89.     s_name.sin_family = AF_INET;
  90.     s_name.sin_port = htons(atoi(argv[1]));
  91.     s_name.sin_addr.s_addr = htonl(INADDR_ANY);
  92.  
  93.     /*
  94.      * Bind name to socket 2.
  95.      */
  96.     printf(" \t Bind name to ls. \n");
  97.     retval = bind(ls, (struct sockaddr *) &s_name, sizeof s_name);
  98.     if (retval) {
  99.         perror("bind");
  100.         cleanup(0, ls, 1);
  101.         exit(EXIT_FAILURE);
  102.     }
  103.  
  104.     /*
  105.      * Listen on socket 2 for connections.
  106.      */
  107.     printf(" \t Listen on ls for connections. \n");
  108.     retval = listen(ls, 5);
  109.     if (retval) {
  110.         perror("listen");
  111.         cleanup(0, ls, 1);
  112.         exit(EXIT_FAILURE);
  113.     }
  114.     declsighandler();
  115.     nfds = 1;
  116.     fds = (struct pollfd *) calloc(1, nfds * sizeof (struct pollfd));
  117.     fds->fd = ls;
  118.     fds->events = POLLIN | POLLPRI;
  119.     for (;;) {
  120.         int i;
  121.         printf("  Selecting ...\n");
  122.         ret = poll(fds, nfds, -1);
  123.         if (ret == -1) {
  124.             perror("poll");
  125.             exit(EXIT_FAILURE);
  126.         }
  127.         for (i = 0; (i < nfds) && (ret); i++) {
  128.             if (!(fds + i)->revents)
  129.                 continue;
  130.             printf("  after : revents=0x%x, ret=%d\n\n",
  131.                     (fds + i)->revents,
  132.                     ret);
  133.             ret--;
  134.             if (((fds + i)->fd == ls) && ((fds + i)->revents & POLLIN)) {
  135.                 /*
  136.                  * Accept connection from socket ls:
  137.                  * accepted connection will be on socket (fds+nfds)->fd.
  138.                  */
  139.                 printf(" \t POLLIN on ls. Accepting connection\n");
  140.                 namelength = sizeof (s_name);
  141.                 fds = (struct pollfd *) realloc(fds, (nfds + 1) * sizeof (struct pollfd));
  142.                 (fds + nfds)->fd = accept(ls, (struct sockaddr *) &s_name, &namelength);
  143.                 if ((fds + nfds)->fd == -1) {
  144.                     perror("accept");
  145.                     cleanup(0, (fds + nfds)->fd, 1);
  146.                     fds = (struct pollfd *) realloc(fds, nfds * sizeof (struct pollfd));
  147.                     continue;
  148.                 }
  149.                 (fds + nfds)->events = POLLIN | POLLPRI | POLLRDBAND | POLLRDNORM | POLLRDHUP;
  150.                 nfds++;
  151.                 continue;
  152.             }
  153.             if ((fds + i)->revents & POLLNVAL) {
  154.                 printf("POLLNVAL on socket. Freeing resource\n");
  155.                 nfds--;
  156.                 memcpy(fds + i, fds + i + 1, nfds - i);
  157.                 fds = (struct pollfd *) realloc(fds, nfds * sizeof (struct pollfd));
  158.                 continue;
  159.             }
  160.             if ((fds + i)->revents & POLLHUP) {
  161.                 printf("\t POLLHUP => peer reset connection ...\n");
  162.                 cleanup(0, (fds + i)->fd, 2);
  163.                 nfds--;
  164.                 memcpy(fds + i, fds + i + 1, nfds - i);
  165.                 fds = (struct pollfd *) realloc(fds, nfds * sizeof (struct pollfd));
  166.                 continue;
  167.             }
  168.             if ((fds + i)->revents & POLLRDHUP) {
  169.                 printf("\t POLLRDHUP => peer disconnected ...\n");
  170.                 cleanup(1, (fds + i)->fd, 2);
  171.                 nfds--;
  172.                 memcpy(fds + i, fds + i + 1, nfds - i);
  173.                 fds = (struct pollfd *) realloc(fds, nfds * sizeof (struct pollfd));
  174.                 continue;
  175.             }
  176.             if ((fds + i)->revents & POLLERR) {
  177.                 printf("\t POLLERR => peer reset connection ...\n");
  178.                 cleanup(0, (fds + i)->fd, 2);
  179.                 nfds--;
  180.                 memcpy(fds + i, fds + i + 1, nfds - i);
  181.                 fds = (struct pollfd *) realloc(fds, nfds * sizeof (struct pollfd));
  182.                 continue;
  183.             }
  184.             if ((fds + i)->revents & POLLRDNORM) {
  185.                 retval = recv((fds + i)->fd, message, sizeof (message), 0);
  186.                 printf(" \t -> (recv) retval = %d.\n", retval); /* ped */
  187.                 if (retval <= 0) {
  188.                     if (retval == 0) {
  189.                         printf("\t recv()==0 => peer disconnected...\n");
  190.                         cleanup(1, (fds + i)->fd, 2);
  191.                     } else {
  192.                         perror("\t receive");
  193.                         cleanup(0, (fds + i)->fd, 1);
  194.                     }
  195.                     nfds--;
  196.                     memcpy(fds + i, fds + i + 1, nfds - i);
  197.                     fds = (struct pollfd *) realloc(fds, nfds * sizeof (struct pollfd));
  198.                     continue;
  199.                 }
  200.                 printf(" \t Normal message :  %.*s\n", retval, message);
  201.                 continue;
  202.             }
  203.             if ((fds + i)->revents & (POLLPRI | POLLRDBAND)) {
  204.                 retval = recv((fds + i)->fd, message, sizeof (message), MSG_OOB);
  205.                 printf(" \t -> (recv) retval = %d.\n", retval); /* ped */
  206.                 if (retval == -1 && errno == EINVAL) {
  207.                     ioctl((fds + i)->fd, SIOCATMARK, &atmark);
  208.                     printf("\t \t atmark = %d\n", atmark);
  209.                     printf("\t \t PEEK ret = %Zd\n", recv((fds + i)->fd, message, 1, MSG_PEEK));
  210.                     printf(" \t PEEK message: %c\n", message[0]);
  211.                     errno = 0;
  212.                     continue;
  213.                 }
  214.                 if (retval <= 0) {
  215.                     if (retval == 0) {
  216.                         printf("\t recv()==0 => peer disconnected...\n");
  217.                         cleanup(1, (fds + i)->fd, 2);
  218.                     } else {
  219.                         perror("\t recv");
  220.                         cleanup(0, (fds + i)->fd, 1);
  221.                     }
  222.                     nfds--;
  223.                     memcpy(fds + i, fds + i + 1, nfds - i);
  224.                     fds = (struct pollfd *) realloc(fds, nfds * sizeof (struct pollfd));
  225.                     continue;
  226.                 } else
  227.                     printf(" \t OOB message : %c\n", message[0]);
  228.                 continue;
  229.             }
  230.         }
  231.     }
  232. } /* end main */
  233.  
  234.  

Оффлайн quiet_readonly

  • Участник
  • *
  • Сообщений: 133
    • Просмотр профиля
Re: отсутствуют хидеры /usr/include/sys
« Ответ #5 : 11 Апрель 2013, 10:46:23 »
Цитировать
хедер уже ссылается на:

/usr/include/i386-Linux-gnu/sys

но как? там ведь символической ссылки нет, а внутри файла лишь одна строка:

#include <sys/poll.h>
Цитировать
Есть полезная утилита apt-file
Спасибо, утилитка действительно очень удобная.
Я правильно понимаю, мне нужно скопировать найденный файл в /usr/include/sys?
Нет, надо лишь убедиться, что хотя бы один пакет с нужным инклюдом установлен. И насколько я помню, в 32-битных системах /usr/include/i386-Linux-gnu/ уже находится в списке путей, где компилятор ищет инклюды.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: отсутствуют хидеры /usr/include/sys
« Ответ #6 : 11 Апрель 2013, 10:57:47 »
На самом деле всё проще.

в man'е написано как и какие заголовочные файлы надо подключать
Остальное сделано за вас.

man говорит что делать надо
Код: C
  1. #define _GNU_SOURCE
  2. #include <poll.h>
и без выпендрёжа.

Если не сказано специально что необходимо указать компилятору путь где искать заголовочные файлы, значит он и так это прекрасно знает.

От куда ТС придумал
Код: C
  1. #include <sys/poll.h>
одному только ему известно.

Оффлайн autrich

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: отсутствуют хидеры /usr/include/sys
« Ответ #7 : 11 Апрель 2013, 11:07:44 »
Большое спасибо за помощь. Решение, предложенное Yurror работает, код компилится, все отлично.

Для меня, правда, так и осталось загадкой, как компилятор подключает заголовочные файлы из sys, так как такого каталога в include нет в принципе.
Спасибо всем за помощь!

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: отсутствуют хидеры /usr/include/sys
« Ответ #8 : 12 Апрель 2013, 11:08:00 »
autrich,
Его там и не должно быть
У компилятора много путей по которым он ищет заголовочные файлы

 

Страница сгенерирована за 0.113 секунд. Запросов: 24.