От разработчика, който разработва драйвер, който обработва тази ioctl
заявка, зависи каква стойност да върне при успех. Обикновено 0
означава, че всичко е минало както трябва. Тази конвенция се използва в UNIX системите от дълго време.
Както и да е, прочетете документацията си относно този конкретен файлов дескриптор и знайте какви стойности връщат конкретни системни извиквания, които се обработват от този файлов дескриптор.
Що се отнася до втория въпрос, операторът =
връща нова стойност на променлива след присвояване. И така, върнатата стойност (която в нашия случай е int
за ioctl
) на израза се оценява неявно на true
, ако ненулева стойност е върната от оператора за присвояване.
В повечето случаи ненулевите отрицателни стойности означават неправилно изпълнение. В някои случаи системните извиквания на UNIX връщат положителни стойности, както правят системните извиквания read
или write
. В случай на read
и write
системни извиквания тяхната положителна върната стойност означава броя на байтовете, които са били прочетени или записани.
Възможно е ioctl
да върне положителна стойност, което може да означава, че изпълнението е преминало нормално и ние връщаме някакво състояние на каквото и да означава този конкретен файлов дескриптор. Още веднъж прочетете внимателно документацията си.
И така, в кода по-долу:
if (error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context)) {
return EXIT_FAILURE;
}
различна от нула стойност се оценява на true
и ние въвеждаме този условен блок от код.
person
mesmerizingr
schedule
03.04.2014
ioctl
връща стойност, различна от 0. - person AntonH   schedule 04.04.2014