GNU sistem bir çok farklı aygıt ve nesne üzerindeki çoğu girdi/çıktı işlemini
read,
write ve
lseek işlevinden oluşan bir kaç ilkelle gerçekleştirir. Buna karşın çoğu aygıt bu modelle karşılanamayan bir kaç tuhaf işleme ihtiyaç gösterir. Örneğin:
-
Bir uçbirimde kullanılan yazıtipinin değişirilmesi.
-
Bir manyetik teybe geri ya da ileri sarmasının söylenmesi. (Bayt artışları ile hareket ettirilemediklerinden lseek uygulanamaz.)
-
Bir diskin sürücüsünden çıkarılması.
-
Bir CD-ROM aygıtındaki ses kaydının çalınması.
-
Bir ağın yönlendirme tablolarının bakımı.
Bu tür nesnelerin yanında soketler ve uçbirimler
[96] gibi nesneler de kendilerine özgü özel işlevlere sahiptir, tüm bu durumlar için işlevler oluşturmak pratik olmazdı.
Bu küçük işlemler yerine IOCTL'ler olarak bilinen kod numaraları atanır ve sys/ioctl.h başlık dosyasında tanımlı olan ioctl işlevi üzerinden bunlar çoğullanır. Kod numaraları farklı başlık dosyalarında tanımlıdır.
int ioctl | (int dosyatanıtıcı,
int komut,
…) |
işlev
ioctl işlevi dosyatanıtıcı tanıtıcı üzerine komut soysal G/Ç işlemini uygular.
Genellikle, tek bir sayı ya da bir yapıya gösterici olarak üçüncü bir argüman daha olur. Bu argümanın anlamı, dönüş değeri ve kullanılan komut ile ilgili hata durumudur. Başarısızlık halinde çoğunlukla -1 döner.
Bazı sistemlerde farklı aygıtlar tarafından kullanılan IOCTL'ler aynı numaraları paylaşırlar. Bu durumda, böyle bir IOCTL hep aynı hatayı üretir. Aygıta özel IOCTL'leri bilinmeyen bir aygıt üzerinde kullanmaya çalışmamalısınız.
Çoğu IOCTL işletim sistemine özeldir ve/veya sadece özel sistem araçlarında kullanılır ve bu nedenle bu belgenin kapsamı dışında kalırlar. Bir IOCTL kullanım örneğini
Bantdışı Veri Aktarımı bölümünde bulabilirsiniz.