Это зависит от разработчика, который разрабатывает драйвер, который обрабатывает этот 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