int ioctl(int fd, int forespørsel, ...);
```
Parametere:
* fd:Dette er en filbeskrivelse for en enhet eller ressurs, vanligvis hentet ved å åpne enhetsfilen knyttet til enheten.
* request:Forespørselsparameteren spesifiserer kommandoen eller operasjonen som må utføres på enheten. Disse kommandoene er definert i enhetsdriveroverskrifter eller andre systemoverskrifter. Hver enhet eller driver kan ha sitt eget sett med unike ioctl()-forespørsler.
* ... (valgfritt):Ytterligere parametere eller data kan være nødvendig for visse ioctl()-forespørsler, avhengig av enheten eller operasjonen. Disse parameterne er vanligvis spesifisert etter forespørselsparameteren som variable argumenter.
Beskrivelse:
Systemkallet ioctl() gir en måte å få tilgang til maskinvarespesifikk funksjonalitet eller utføre operasjoner som ikke leveres direkte av standard systemkall. Den lar programmer på brukernivå samhandle med enhetsdrivere eller kjernemoduler på en kontrollert måte. Avhengig av den spesifikke forespørselen og enheten, kan ioctl() brukes til en rekke formål, inkludert:
* Konfigurere enhetsparametere:ioctl()-forespørsler kan brukes til å angi eller hente ulike konfigurasjonsinnstillinger for en enhet. Du kan for eksempel bruke ioctl() for å justere lydvolumnivåer eller konfigurere nettverksgrensesnittparametere.
* Utføre I/O-operasjoner på lavt nivå:Noen ioctl()-forespørsler gir direkte tilgang til I/O-operasjoner på lavt nivå av maskinvare som kanskje ikke er tilgjengelige for programmer på brukernivå gjennom standard I/O-funksjoner.
* Egendefinerte kontrolloperasjoner:Enhetsdrivere kan avsløre tilpassede ioctl()-forespørsler som gjør det mulig for applikasjoner å utføre spesifikke oppgaver eller operasjoner som er unike for den enheten.
Bruk:
For å bruke ioctl(), må du vanligvis kjenne den spesifikke ioctl()-forespørselen du må utføre. Enhetsdrivere eller kjernemoduler gir ofte dokumentasjon for ioctl()-forespørslene de støtter. Noen standard header-filer som eller kan også definere generiske ioctl()-forespørsler som gjelder for forskjellige enheter eller drivere.
Bruken av ioctl() krever også en åpen filbeskrivelse for enheten eller ressursen du ønsker å kontrollere. Du kan få tak i filbeskrivelsen ved å åpne enhetsfilen knyttet til enheten, på samme måte som du ville åpnet en vanlig fil.
Eksempel:
Her er et eksempel i C som illustrerer bruken av ioctl() for å stille inn volumnivået til en lydenhet:
```C
#include
#include
#include
int main() {
int fd =open("/dev/audio", O_RDWR);
if (fd ==-1) {
perror("Feil ved åpning /dev/audio");
retur 1;
}
// Definer ioctl-forespørsel for å stille inn volumet
const int SET_VOLUME =0x4004524f; // Denne verdien er definert i driverdokumentasjonen
int nytt_volum =50; // Spesifiser det nye volumnivået (0 til 100)
if (ioctl(fd, SET_VOLUME, &new_volume) ==-1) {
perror("Feil ved innstilling av volum");
retur 1;
}
lukk(fd);
returner 0;
}
```
I dette eksemplet åpner vi enhetsfilen "/dev/audio", som er knyttet til lydsystemet. Deretter bruker vi ioctl() med SET_VOLUME-forespørselen for å angi det nye volumnivået. Merk at det spesifikke forespørselsnummeret og strukturen til ioctl()-argumentene avhenger av enhetsdriverimplementeringen.