int ioctl(int fd, int begäran, ...);
```
Parametrar:
* fd:Detta är en filbeskrivning för en enhet eller resurs, vanligtvis erhållen genom att öppna enhetsfilen som är associerad med enheten.
* request:Begäransparametern anger kommandot eller operationen som måste utföras på enheten. Dessa kommandon definieras i enhetsdrivrutinsrubriker eller andra systemhuvudfiler. Varje enhet eller drivrutin kan ha sin egen uppsättning unika ioctl()-förfrågningar.
* ... (valfritt):Ytterligare parametrar eller data kan krävas för vissa ioctl()-förfrågningar, beroende på enheten eller operationen. Dessa parametrar anges vanligtvis efter begäran-parametern som variabla argument.
Beskrivning:
Systemanropet ioctl() tillhandahåller ett sätt att komma åt hårdvaruspecifik funktionalitet eller utföra operationer som inte tillhandahålls direkt av standardsystemanropen. Det tillåter program på användarnivå att interagera med drivrutiner eller kärnmoduler på ett kontrollerat sätt. Beroende på den specifika begäran och enheten kan ioctl() användas för en mängd olika ändamål, inklusive:
* Konfigurera enhetsparametrar:ioctl()-förfrågningar kan användas för att ställa in eller hämta olika konfigurationsinställningar för en enhet. Till exempel kan du använda ioctl() för att justera ljudvolymnivåer eller konfigurera nätverksgränssnittsparametrar.
* Utföra I/O-operationer på låg nivå:Vissa ioctl()-förfrågningar tillåter direkt åtkomst till I/O-operationer för hårdvara på låg nivå som kanske inte är tillgängliga för program på användarnivå via standard I/O-funktioner.
* Anpassade kontrolloperationer:Enhetsdrivrutiner kan avslöja anpassade ioctl()-förfrågningar som gör det möjligt för applikationer att utföra specifika uppgifter eller operationer som är unika för den enheten.
Användning:
För att använda ioctl() behöver du vanligtvis känna till den specifika ioctl()-begäran du behöver utföra. Enhetsdrivrutiner eller kärnmoduler tillhandahåller ofta dokumentation för de ioctl()-förfrågningar som de stöder. Vissa vanliga header-filer som eller kan också definiera generiska ioctl()-förfrågningar som är tillämpliga på olika enheter eller drivrutiner.
Användningen av ioctl() kräver också en öppen filbeskrivning för enheten eller resursen du vill kontrollera. Du kan få filbeskrivningen genom att öppna enhetsfilen som är associerad med enheten, liknande hur du skulle öppna en vanlig fil.
Exempel:
Här är ett exempel i C som illustrerar användningen av ioctl() för att ställa in volymnivån för en ljudenhet:
```C
#include
#include
#include
int main() {
int fd =open("/dev/audio", O_RDWR);
if (fd ==-1) {
perror("Fel vid öppning av /dev/audio");
retur 1;
}
// Definiera ioctl-begäran för att ställa in volymen
const int SET_VOLUME =0x4004524f; // Detta värde definieras i drivrutinsdokumentationen
int ny_volym =50; // Ange den nya volymnivån (0 till 100)
if (ioctl(fd, SET_VOLUME, &new_volym) ==-1) {
perror("Fel vid inställning av volym");
retur 1;
}
close(fd);
returnera 0;
}
```
I det här exemplet öppnar vi enhetsfilen "/dev/audio", som är associerad med ljudsystemet. Sedan använder vi ioctl() med begäran om SET_VOLUME för att ställa in den nya volymnivån. Observera att det specifika begärannumret och strukturen för ioctl()-argumenten beror på enhetsdrivrutinens implementering.