Do dewelopera, który opracuje sterownik, który obsługuje to żądanie, należy zwrócić jaką wartość, aby powrócić do sukcesu. Zwykle 0
oznacza, że wszystko poszło dobrze. Ta konwencja była używana w systemach UNIX przez długi czas.
W każdym razie przeczytaj dokumentację dotyczącą tego konkretnego deskryptora pliku i dowiedz się, jakie wartości zwracają określone wywołania systemowe obsługiwane przez ten deskryptor pliku.
Jeśli chodzi o drugie pytanie, operator =
zwraca nową wartość zmiennej po przypisaniu. Tak więc wartość zwracana (w naszym przypadku int
dla ioctl
) wyrażenia jest oszacowana niejawnie na true
, jeśli operator przypisania przydzieli inną niż zero wartość.
Większość sposobów niezerowych wartości ujemne oznacza błędne wykonanie. W niektórych przypadkach wywołania systemowe systemu UNIX zwracają wartości dodatnie, jak robią to wywołania systemowe read
lub write
. W przypadku wywołań systemowych read
i write
ich dodatnia wartość zwracana oznacza liczbę bajtów, które zostały przeczytane lub zapisane.
Możliwe jest mieć ioctl
powrotną pozytywną wartość, która może oznaczać, że wykonanie poszło normalnie i wracamy trochę stan o cokolwiek stoi ten konkretny deskryptor pliku dla. Ponownie przeczytaj uważnie swoją dokumentację.
więc w poniższym kodzie:
if (error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context)) {
return EXIT_FAILURE;
}
niezerową wartość oceniana jest na true
i wjeżdżamy że warunkowy blok kodu.
1) Nie. Przeczytaj to: http://man7.org/linux/man-pages/man2/ioctl.2.html 2) Wartość "prawda", jeśli "ioctl" zwraca wartość inną niż 0. – AntonH
@AntonH Powinieneś opublikować jako odpowiedź :) –
@JesusRamos Powinienem, ale ponieważ jest to krótka/szybka odpowiedź, myślę, że to trochę marnowanie odpowiedzi. Tęskniłem za tak dużą renomą: D – AntonH