Spetta allo sviluppatore che sviluppa driver che gestisce questa richiesta ioctl
quale valore restituire in caso di successo. Solitamente, 0
significa che tutto è andato bene. Questa convenzione è stata utilizzata per molto tempo nei sistemi UNIX.
In ogni caso, leggere la documentazione relativa a questo particolare descrittore di file e sapere quali valori particolari chiamate di sistema gestite da questo ritorno del descrittore di file.
Per quanto riguarda la seconda domanda, l'operatore =
restituisce un nuovo valore di variabile dopo l'assegnazione. Pertanto, il valore restituito (che nel nostro caso è ioctl
) per l'espressione viene valutato in modo implicito in true
se l'operatore di assegnazione restituisce un valore diverso da zero.
La maggior parte dei modi, non pari a zero valori negativi significa esecuzione errata. In alcuni casi, le chiamate di sistema UNIX restituiscono valori positivi come le chiamate di sistema read
o write
. In caso di chiamate di sistema read
e write
, il loro valore di ritorno positivo indica il numero di byte letti o scritti.
E 'possibile avere ioctl
ritorno valore positivo che può significare che l'esecuzione è andato normalmente e torniamo un po' stato di tutto ciò che questo particolare descrittore di file rappresenta. Ancora una volta, leggi attentamente la tua documentazione.
Così, nel seguente codice:
if (error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context)) {
return EXIT_FAILURE;
}
valore diverso da zero viene valutata per true
ed entriamo quel blocco condizionale di codice.
1) No. Leggi questo: http://man7.org/linux/man-pages/man2/ioctl.2.html 2) Valuta su "true" se "ioctl" restituisce un valore diverso da 0. – AntonH
@AntonH Dovresti postare come risposta :) –
@JesusRamos Dovrei, ma visto che è una risposta così breve/rapida, penso che sia un po 'uno spreco di risposta. Mi manca così tanta reputazione: D – AntonH