2014-04-03 19 views
5

Aşağıdaki kodla karşılaştım.IOCTL döndürme değeri

if((error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context))) 
{ 
     return EXIT_FAILURE; 
} 

Benim sorulara şunlardır:

  1. mu IOCTL hep dönmek '0' başarısı üzerine?
  2. Aşağıdaki ifade nasıl bir pozitif/TRUE değerini değerlendiriyor? Yukarıdaki ifade ioctl bir sıfır olmayan dönüş değeri için true değerlendiriyor nasıl

    (error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context)) 
    

?

+2

1) Hayır. Bunu okuyun: http://man7.org/linux/man-pages/man2/ioctl.2.html 2) "ioctl" 0'dan farklı bir değer döndürürse "true" değerini değerlendirir. – AntonH

+0

@AntonH Bir cevap olarak göndermelisiniz :) –

+1

@JesusRamos Yapmalıyım, ama bu kadar kısa/hızlı bir cevap olduğu için, bunun bir yanıt israfı olduğunu düşünüyorum. Çok fazla itibarı özlüyorum: D – AntonH

cevap

6

Bu ioctl işlemcisini çalıştıran sürücüyü geliştiren geliştiriciye, başarı için hangi değerde geri dönmesi gerektiğini sorun. Genellikle, 0 her şeyin doğru gittiği anlamına gelir. Bu sözleşme, UNIX sistemlerinde uzun süre kullanılmıştır. Her neyse, bu dosya tanıtıcısıyla ilgili belgelerinizi okuyun ve bu dosya tanıtıcısı tarafından işlenen belirli sistem çağrılarının hangi değerlerini döndürdüğünü öğrenin.

İkinci soruya gelince, = işleci, atama sonrasında yeni bir değişken değeri döndürür. Bu nedenle, döndürme değeri (bizim durumumuzda için ioctl), dolaylı olaraktrue, atanan işleç tarafından sıfır olmayan bir değer döndürülürse değerlendirilir.

negatif olmayan değerlerinin çoğu, hatalı yürütme anlamına gelir. Bazı durumlarda UNIX sistem çağrıları, read veya write sistem çağrıları yaptıkça pozitif değerler döndürür. read ve write sistemlerinde pozitif geri dönüş değerleri, okunan veya yazılan bayt sayısı anlamına gelir. Mümkün

o yürütme normalde gitti anlamına gelebilir ioctl dönüş pozitif değere sahip ve biz bu özel bir dosya tanıtıcı açılımı ne olursa olsun bazı devlet döndürür. Bir kez daha belgelerinizi dikkatlice okuyun.

Yani, aşağıda kodu:

if (error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context)) { 
     return EXIT_FAILURE; 
} 

sıfır olmayan bir değer true için değerlendirilir ve kodun o koşullu blok girin.

İlgili konular