errno всегда возвращает ноль в VxWorks PPC

Я запускаю свой код на VxWorks PPC, и в случае сбоя системного вызова, особенно для функций отправки/получения сокета, errno всегда возвращает 0.

После некоторого анализа я обнаружил, что errno возвращает 0 в случае сбоя всех системных вызовов.

Есть ли какая-либо инициализация, которую я должен выполнить, чтобы errno возвращал правильные значения?


person Jay    schedule 26.03.2010    source источник
comment
Вы включаете «<errno.h>» и не пишете «extern int errno;»? Получаете ли вы сообщения об ошибках от системных вызовов? Переменная errno никогда не обнуляется библиотекой, но имеет значение только тогда, когда системный вызов возвращает индикацию ошибки.   -  person Jonathan Leffler    schedule 26.03.2010
comment
Да. Я включаю ‹errno.h› и не включаю 'extern int errno'. Это имеет значение? Мой код компилируется и линкуется нормально. Мои системные вызовы определенно возвращают индикацию ошибки.   -  person Jay    schedule 26.03.2010
comment
errno на самом деле не является «внешним внутренним errno;». Это не позволило бы использовать несколько потоков, потому что им пришлось бы совместно использовать одно значение errno, и вы никогда не узнаете, какому потоку действительно принадлежит значение. Это макрос, который расширяется до некоторого кода для доступа к локальной версии потока, так что это должно иметь значение.   -  person nategoose    schedule 26.03.2010


Ответы (2)


В оболочке (будь то ядро ​​или хост), если вы наберете команду «i», вы получите список своих задач. Одним из полей является значение errno. Найдите задачу, в которой есть ошибка, и значение errno должно быть установлено.

При проверке errno вы ДОЛЖНЫ находиться в той же задаче, которая вызвала ошибку:

if(ERROR = someSystemFunction())
  printf("errno=%x", errno);

Вы не можете быть в оболочке и ожидать, что напечатаете errno

-> errno     (<---- will NEVER work)
errno:0x123455 value: 0 = 0x0
person Benoit    schedule 04.05.2010

errnoGet() вернет вам номер ошибки задачи, в которой она выполняется. См. документацию по errnoLib для получения информации об ошибке другой задачи.

person fanch    schedule 18.06.2010