iconv işlevi
dt dönüşüm tanımlayıcısı ile ilişkilendirilmiş kurallara uygun olarak girdi tamponundaki metni dönüştürerek sonucu çıktı tamponunda saklar. Gerekli durum bilgisi tanımlayıcı ile ilişkilendirilmiş veri yapıları içinde tutulduğundan aynı metin için işlev defalarca çağrılabilir.
*girdi_tamponu ile belirtilen girdi tamponu *girdi_uzunluğu bayt içerir. Kullanılan girdinin çağrıcı ile iletişimi için ek olarak bir dolaylı işlem gerekir. Tampon göstericisinin char türünde olduğuna dikkat edin. Uzunluk, tampondaki karakterler geniş karakterler olsa bile bayt cinsindendir.
Çıktı tamponu da benzer şekilde sonucun saklanacağı *çıktı_tamponu göstericisinin belirtiği adresten başlayan en az *çıktı_uzunluğu baytlık bir alan olarak belirtilir. Yine benzer şekilde tampon göstericisi char türündedir ve tampon uzunluğu bayt cinsindendir. çıktı_tamponu veya *çıktı_tamponu bir boş gösterici ise dönüşüm yine yapılır ama bir çıktı üretilmez.
girdi_tamponu bir boş gösterici ise, dönüşüm durumunu ilk duruma getiren bir eylem gerçekleştirilir. Bu, durumsal olmayan kodlamalarda bir eylemle sonuçlanmaz, ama eğer, kodlama bir duruma sahipse böyle bir işlev çağrısı gerekli durum değişikliklerini gerçekleştirecek bazı bayt dizilimlerini çıktı tamponuna koyar. Normal bir girdi_tamponu ile yapılan bir sonraki işlev çağrısında dönüşüm ilk durumdan başlar. Yazılımcının dönüşümün durumsallığı ile ilgili bir önkabul yapmaktan kaçınması gerekir. Girdi ve çıktı karakterleri durumsal olmasa bile gerçekleme yine de durumları tutmak zorunda olabilir. Aşağıda açıklanan sebeplerden dolayı GNU C kütüphanesinde bu böyledir. Bu nedenle, durumu sıfırlayacak bir iconv çağrısı, bir protokol, çıktı metni için bunu gerektiriyorsa daima bunu yapacaktır.
Dönüşüm üç sebepten birine bağlı olarak durabilir. İlki girdi tamponundaki tüm karakterlerin dönüştürüldüğü durumdur. Bu aslında iki farklı anlama gelir: Ya girdi tamponundaki tüm karakterler tüketilmiştir ya da tamponun sonunda girdide eksik ama tamponda tam biçimde olan bazı baytlar bulunmuştur. Durmanın ikinci sebebi çıktı tamponunun dolmasıdır. Üçüncüsü ise girdinin geçersiz karakterler içermesidir.
Bu durumların hepsinde sorunsuz yapılan son dönüşümün ardından girdi ve çıktı tamponları girdi_tamponu ve çıktı_tamponu'nda ve her tamponun uzunluğu sırayla girdi_uzunluğu ve çıktı_uzunluğu göstericileriyle döndürülür.
iconv_open çağrısında seçilen karakter kümeleri hemen hemen tamamen isteğe bağlı olduğundan girdi karakter kümesinde, çıktı karakter kümesinde karşılığı olmayan karakterler bulunabilir. Bu durumda işlevin davranışı tanımsızdır. GNU C kütüphanesinin bu durum karşısında şimdiki davranışı bir hata durumu ile dönmektir. Bu olması gereken bir çözüm değildir; bu nedenle, daha iyi bir çözüm için çalışmalar sürmektedir ve kütüphanenin gelecek sürümlerinde daha iyi bir çözüm sunulacaktır.
Girdi tamponundaki karakterlerin tümü değiştirilip sonuç çıktı tamponunda saklanmışsa, işlev tersinir olmayan dönüşümlerin sayısı ile döner. Bunun dışındaki tüm durumlarda işlev (size_t) -1 ile döner ve errno değişkenine hata durumunu kaydeder. Böyle durumlarda girdi_uzunluğu ile gösterilen değer sıfırdan farklıdır.
- EILSEQ
Girdi geçersiz bir bayt dizilimi içerdiğinden dönüşüm durdu. Çağrıdan sonra, *girdi_tamponu geçerli bayt dizilimlerinin ilk baytını gösterir.
- E2BIG
Çıktı tamponu yetersiz olduğundan dönüşüm durdu.
- EINVAL
Girdi tamponunun sonundaki bayt dizilimi eksik olduğundan dönüşüm durdu.
- EBADF
dt argümanı geçersiz.
iconv işlevinden XPG2 standardında bahsedilmiş ve işlev
iconv.h başlık dosyasında bildirilmiştir.