Eşzamansız G/Ç İşlemlerinin İptal Edilmesi
Önceki Eşzamansız G/Ç Sonraki
Eşzamansız G/Ç İşlemlerinin İptal Edilmesi
Bir ya da daha fazla istek eşzamansız olarak işlenirken, yazılması istenen bir verinin artık geçersiz hale gelmesi ve dolayısıyla bu verinin daha sonra düzeltilmesinin gerekmesi gibi bazı durumlarda seçilen bir işlemin iptal edilmesi gerekebilir. Bir örnek olarak, gelen veriyi dosyalara yazan bir uygulamanın, bir dosyaya yazılmak üzere gelmiş bir verinin kuyruğa alınacak bir başka istek ile güncellenmek istemesi verilebilir. POSIX eşzamansız G/Ç gerçeklemesi böyle bir işlev içerir, fakat bu işlevin bir isteği iptale zorlama yeteneği yoktur. Sadece bir isteğin iptalinin mümkün olup olmadığına karar vermeye yardımcı olur.
int aio_cancel
(int           dosyatanıtıcı,
 struct aiocb *aiocbp)
işlev
aio_cancel işlevi askıdaki bir ya da daha fazla isteği iptal etmek için kullanılabilir. aiocbp parametresi NULL ise dosyatanıtıcı ile ilgili askıdaki tüm işlemleri iptal etmeye çalışır. aiocbp parametresi NULL değilse, aiocbp ile gösterilen belli bir isteği iptal etmeye çalışır.
Başarıyla iptal edilen istekler için isteğin sonlanması ile ilgili normal uyarı yapılmalıdır. Bunu denetleyen struct sigevent nesnesine bağlı olarak hiçbir şey yapılmaz, bir sinyal gönderilir ya da evre başlatılır. İstek iptal edilemezse, işlem, gerçekleştikten sonra normal yolla sonlanır.
Bir istek başarıyla iptal edildikten sonra, bu istek için yapılan bir aio_error çağrısı ECANCELED ile, aio_return ise -1 ile döner. Eğer istek iptal edilmemişse ve hala işlenmekteyse hata durumu EINPROGRESS olur.
Sonlanmadan iptal edilmiş bir istek varsa, işlevin dönüş değeri AIO_CANCELED olur. İptal edilmemiş istek ya da istekler varsa, dömüş değeri AIO_NOTCANCELED olur. Bu durumda (aiocbp'nin NULL olarak belirtildiği durum) iptal edilemeyen istekleri bulmak için aio_error kullanılmalıdır. Tüm istekler iptal edilmişse aio_cancel işlevinin dönüş değeri AIO_ALLDONE olacaktır.
aio_cancel çağrısı sırasında bir hata oluşmuşsa işlev -1 ile döner ve errno değişkenine aşağıdaki durumlardan biri atanır:
EBADF
dosyatanıtıcı tanıtıcısı geçersiz
ENOSYS
aio_cancel desteklenmiyor
Kaynak dosyası _FILE_OFFSET_BITS == 64 ile derlenmişse 32 bitlik sistemlerde bu işlev aslında aio_cancel64 işlevine karşılıktır. Yani 32 bitlik arayüz 64 bitlik olanıyla değiştirilir.
int aio_cancel64
(int             dosyatanıtıcı,
 struct aiocb64 *aiocbp)
işlev
Bu işlev, argümanının struct aiocb64 türünde bir değişken olması dışında aio_cancel işlevine benzer.
Kaynak dosyası _FILE_OFFSET_BITS == 64 ile derlenmişse 32 bitlik sistemlerde bu işleve aio_cancel ismiyle erişilir. Yani 32 bitlik arayüz 64 bitlik olanıyla değiştirilir.
Önceki Üst Ana Başlık Sonraki
Eşzamansız G/Ç İşlemlerinin Eşzamanlanması Başlangıç Eşzamansız G/Ç İşlemlerinin Yapılandırılması
Bir Linux Kitaplığı Sayfası