Next: sysctl() (2.2.x)
Up: Socket tuning
Previous: fcntl()
  Contents
O funkcji ioctl() możnaby mówić długo. W założeniu przeznaczona do
kontrolowania zachowania różnych urządzeń, w praktyce może być wykorzystana do
zmieniania atrybutów gniazd, pobierania listy interfejsów, zmieniania tabeli
routingu, tablic ARP ...
#include <sys/ioctl.h>
int ioctl (int d, int request, ...)
- d - Deskryptor "urządzenia". W naszym przypadku po prostu deskryptor
gniazda.
- request - Polecenie przekazywane do "urządzenia".
- ... - Różne parametry w zależności od request.
Wszystkich ioctl'sow jest bardzo dużo. Praktycznie każde urządzenie udostępnia
jakis ioctl. Całkiem obfitą listę można zobaczyć wydając polecenie man
ioctl_list. Natomiast wszystkie ioctls ukierunkowane na sterowanie szeroko
pojętą siecią (gniazda, interfejsy, routing itp.) można zobaczyć w pliku
/usr/include/bits/ioctls.h. Teraz tylko króciutko przyjrzymy się kilku
najczęściej używanym - jak z nich skorzystać zobaczymy trochę później. Oto one:
- SIOCADDRT, SIOCDELRT - dodawanie/usuwanie wpisów w tablicy routingu
- SIOCGIFNAME - zwraca nazwę interfejsu na podstawie jego indeksu
- SIOCGIFINDEX - odwrotnie niż SIOCGIFNAME
- SIOCSIFNAME - zmienia nazwę interfejsu
- SIOCGIFCONF - pobiera listę interfejsów sieciowych obecnych w systemie
- SIOCGIFFLAGS, SIOCSIFFLAGS - odczyt/zmiana różnych flag interfejsów
- SIOCGIFADDR , SIOCSIFADDR - odczyt/zmiana adresów interfejsów
- SIOCGIFNETMASK, SIOCSIFNETMASK - odczyt/zmiana masek sieciowych interfejsów
- SIOCGIFHWADDR , SIOCSIFHWADDR - odczyt/zmiana adresów MAC
- FIOCSETOWN, FIOCGETOWN - dokladnie to samo, co wywołanie fcntl() z argumentami
F_SETOWN/F_GETOWN ...
- SIOCSPGRP , SIOCGPGRG - SIOCSPGRP=FIOCSETOWN, SIOCGPGRP=FIOCGETOWN
- FIOASYNC - to samo co fcntl(sd,F_SETFL,O_ASYNC)
- SIOCGSTAMP - podaje, czas nadejścia ostatniego pakietu na danym
gnieździe
- FIONREAD - podaje ilość danych do odczytania znajdujących się
w buforze gniazda (TCP)
- TIOCOUTQ - podaje ilość danych znajdujących się w kolejce do
wysłania (TCP)
- SIOCATMARK - sprawdza, czy aktualny wskaźnik odczytu wskazuje na
miejsce, w którym zostały odebrane dane OOB (TCP)
Next: sysctl() (2.2.x)
Up: Socket tuning
Previous: fcntl()
  Contents
Paweł Niewiadomski
2000-10-17