|
|
  |
API для работы с сетевым оборудованием в Linux. |
|
|
|
Nov 7 2010, 19:39
|
Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205

|
Чисто теоретически, если задача разовая то нужно смотреть как задаются сетевые настройки в конкретном дистрибутиве, например если есть какой-то демон, то у него обычно есть конфигурационный файл в /etc/*.conf (например) и дальше задача сводиться к редактированию текстового файла и затем перезапуска соответствующего демона (или есть поддержка, то заставить демон перечитать файл конфигурации). Если круг задач покрывается утилитой ifconfig, то можно ограничиться вызовом функции system() предварительно через sprintf сформировав аргументы. Если же задача не разовая и решать ее нужно будет часто, но в разных вариациях, то тут уже нужно смотреть исходники net-tools (куда входит ifconfig) и разбираться как оно работает. По поводу подключения/отключения сетевого кабеля, возможно стоит смотреть в сторону sysfs и procfs (/sys/* и /proc/*), возможно из них можно будет выцепить что-то полезное. Сам я в этом еще нуб, но думаю что скоро подтянуться более опытные люди и дадут вам более исчерпывающие ответы.
|
|
|
|
|
Nov 8 2010, 17:03
|

Частый гость
 
Группа: Участник
Сообщений: 129
Регистрация: 28-08-08
Из: г.Омск
Пользователь №: 39 870

|
Спасибо, посмотрим. Вот нашел книгу по Linux API : http://kernelbook.sourceforge.net/kernel-api.pdf думаю там можно кое чего посмотреть.
|
|
|
|
|
Nov 9 2010, 09:31
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(Oops @ Nov 4 2010, 13:59)  Я думаю есть специальные API функции для работы с сетевым оборудованием в Linux. Посоветуйте кто знает, как это лучше сделать, где и что почитать? Спасибо!!! Практически всё, что Вам придёт в голову сотворить с сетевыми интерфейсами в Linux, можно сделать с помощью ioctl() вызовов, посылаемых открытому сокету. Вот простой пример получения текущего IP-адреса конкретного сетевого интерфейса: Код #include <sys/socket.h> #include <sys/ioctl.h> ..................... struct ifreq ifr; int sock_fd, result; struct sockaddr_in* sa; ..................... strcpy(ifr.ifr_name, "eth0"); sock_fd = socket(AF_INET, SOCK_DGRAM, 0); result = ioctl(sock_fd, SIOCGIFADDR, &ifr); close(sock_fd); if(result<0) { printf("Error: invalid network interface\n"); return -1; } sa = (struct sockaddr_in*) &ifr.ifr_addr; printf("eth0 IP is %s\n", inet_ntoa(sa->sin_addr));
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Nov 27 2010, 13:25
|
Местный
  
Группа: Участник
Сообщений: 221
Регистрация: 8-08-07
Пользователь №: 29 664

|
Цитата(Oops @ Nov 4 2010, 13:59)  Здравствуйте!!! Пишу программку, в которой нужно работать с сетью. Тоесть через эту программку можно менять IP адрес сетевого интерфейса, маску, путь, также она работает в фоне и отслеживает состояние сети. Тоесть если сеть упала (выдернули сетевой кабель) программка сообщает об этом, если сеть заработала снова (подключили сетевой кабель) она также сообщает. Я думаю есть специальные API функции для работы с сетевым оборудованием в Linux. Посоветуйте кто знает, как это лучше сделать, где и что почитать? имхо лучше начать не с того, чтобы строить свой велосипед, а посмотреть - что написано до вас.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|