Когда я получаю сообщение об ошибке 0x10, я хочу понять этот код ошибки. Поиск IOReturn.h и mach/error.h не особенно удобен. Я потерялся, когда получил код ошибки 0x22. Это действительно глупый вопрос, но существует ли такая функция, как error2String, которая может отображать код ошибки IOReturn в строку, описывающую ошибку?
Сопоставление кода ошибки IOKit IOReturn со строкой
comment
Итак, что это был за код ошибки 0x10? (Я испытываю это прямо сейчас.) Спасибо!
- person Greg Maletic   schedule 08.02.2011
Ответы (4)
Для этого вы можете использовать стандартную базовую функцию mach_error_string.
Например. в Свифте:
func krToString (_ kr: kern_return_t) -> String {
if let cStr = mach_error_string(kr) {
return String (cString: cStr)
} else {
return "Unknown kernel error \(kr)"
}
}
person
Colin Wilson
schedule
12.12.2019
Я не знаю, почему за это не проголосовали больше. Гораздо чище, чем массивная таблица поиска
- person genghiskhan; 15.05.2020
Я согласен с @genghiskhan, это лучшее решение! Функция объявлена в
mach/mach_error.h
.
- person Jonas Due Vesterheden; 26.05.2020
Код, работающий в ядре, может использовать IOService::stringFromReturn(...)
person
Nick Dowell
schedule
27.10.2010
Документация определенно предполагает, что это правильный путь... но я совершенно не понимаю, как вызвать это из моего кода. Все, что я получаю, это символ не найденных ошибок. На что мне нужно ссылаться? Импортировать/включить? Большое спасибо.
- person Greg Maletic; 08.02.2011
Является ли ваш код расширением ядра или приложением/библиотекой пользовательского режима? IOService::stringFromReturn(...) (к сожалению) доступен только для кода, работающего в ядре.
- person Nick Dowell; 09.02.2011
Я перенес его из IOService.h, это должно сработать.
-(NSString*)stringFromError:(unsigned int)errorVal
{
NSDictionary *ioReturnMap =
@{@kIOReturnSuccess: @"success",
@kIOReturnError: @"general error",
@kIOReturnNoMemory: @"memory allocation error",
@kIOReturnNoResources: @"resource shortage",
@kIOReturnIPCError: @"Mach IPC failure",
@kIOReturnNoDevice: @"no such device",
@kIOReturnNotPrivileged: @"privilege violation",
@kIOReturnBadArgument: @"invalid argument",
@kIOReturnLockedRead: @"device is read locked",
@kIOReturnLockedWrite: @"device is write locked",
@kIOReturnExclusiveAccess: @"device is exclusive access",
@kIOReturnBadMessageID: @"bad IPC message ID",
@kIOReturnUnsupported: @"unsupported function",
@kIOReturnVMError: @"virtual memory error",
@kIOReturnInternalError: @"internal driver error",
@kIOReturnIOError: @"I/O error",
@kIOReturnCannotLock: @"cannot acquire lock",
@kIOReturnNotOpen: @"device is not open",
@kIOReturnNotReadable: @"device is not readable",
@kIOReturnNotWritable: @"device is not writeable",
@kIOReturnNotAligned: @"alignment error",
@kIOReturnBadMedia: @"media error",
@kIOReturnStillOpen: @"device is still open",
@kIOReturnRLDError: @"rld failure",
@kIOReturnDMAError: @"DMA failure",
@kIOReturnBusy: @"device is busy",
@kIOReturnTimeout: @"I/O timeout",
@kIOReturnOffline: @"device is offline",
@kIOReturnNotReady: @"device is not ready",
@kIOReturnNotAttached: @"device/channel is not attached",
@kIOReturnNoChannels: @"no DMA channels available",
@kIOReturnNoSpace: @"no space for data",
@kIOReturnPortExists: @"device port already exists",
@kIOReturnCannotWire: @"cannot wire physical memory",
@kIOReturnNoInterrupt: @"no interrupt attached",
@kIOReturnNoFrames: @"no DMA frames enqueued",
@kIOReturnMessageTooLarge: @"message is too large",
@kIOReturnNotPermitted: @"operation is not permitted",
@kIOReturnNoPower: @"device is without power",
@kIOReturnNoMedia: @"media is not present",
@kIOReturnUnformattedMedia: @"media is not formatted",
@kIOReturnUnsupportedMode: @"unsupported mode",
@kIOReturnUnderrun: @"data underrun",
@kIOReturnOverrun: @"data overrun",
@kIOReturnDeviceError: @"device error",
@kIOReturnNoCompletion: @"no completion routine",
@kIOReturnAborted: @"operation was aborted",
@kIOReturnNoBandwidth: @"bus bandwidth would be exceeded",
@kIOReturnNotResponding: @"device is not responding",
@kIOReturnInvalid: @"unanticipated driver error",
};
return [ioReturnMap objectForKey:[NSNumber numberWithInt:err_get_code(errorVal)]];
}
person
chuckus
schedule
01.11.2013
На основании этой страницы вы вероятно, следует использовать макрос
err_get_code()
для извлечения кода ошибки в первую очередь.
- person augurar; 31.01.2014
Ответ Колина Уилсона намного лучше! Используйте
mach_error_string()
из mach/mach_error.h
.
- person Jonas Due Vesterheden; 26.05.2020
Вот версия ответа @chuckus для Swift:
func convertIOReturnToString(_ status: IOReturn) -> String? {
let map = [
kIOReturnSuccess: "success",
kIOReturnError: "general error",
kIOReturnNoMemory: "memory allocation error",
kIOReturnNoResources: "resource shortage",
kIOReturnIPCError: "Mach IPC failure",
kIOReturnNoDevice: "no such device",
kIOReturnNotPrivileged: "privilege violation",
kIOReturnBadArgument: "invalid argument",
kIOReturnLockedRead: "device is read locked",
kIOReturnLockedWrite: "device is write locked",
kIOReturnExclusiveAccess: "device is exclusive access",
kIOReturnBadMessageID: "bad IPC message ID",
kIOReturnUnsupported: "unsupported function",
kIOReturnVMError: "virtual memory error",
kIOReturnInternalError: "internal driver error",
kIOReturnIOError: "I/O error",
kIOReturnCannotLock: "cannot acquire lock",
kIOReturnNotOpen: "device is not open",
kIOReturnNotReadable: "device is not readable",
kIOReturnNotWritable: "device is not writeable",
kIOReturnNotAligned: "alignment error",
kIOReturnBadMedia: "media error",
kIOReturnStillOpen: "device is still open",
kIOReturnRLDError: "rld failure",
kIOReturnDMAError: "DMA failure",
kIOReturnBusy: "device is busy",
kIOReturnTimeout: "I/O timeout",
kIOReturnOffline: "device is offline",
kIOReturnNotReady: "device is not ready",
kIOReturnNotAttached: "device/channel is not attached",
kIOReturnNoChannels: "no DMA channels available",
kIOReturnNoSpace: "no space for data",
kIOReturnPortExists: "device port already exists",
kIOReturnCannotWire: "cannot wire physical memory",
kIOReturnNoInterrupt: "no interrupt attached",
kIOReturnNoFrames: "no DMA frames enqueued",
kIOReturnMessageTooLarge: "message is too large",
kIOReturnNotPermitted: "operation is not permitted",
kIOReturnNoPower: "device is without power",
kIOReturnNoMedia: "media is not present",
kIOReturnUnformattedMedia: "media is not formatted",
kIOReturnUnsupportedMode: "unsupported mode",
kIOReturnUnderrun: "data underrun",
kIOReturnOverrun: "data overrun",
kIOReturnDeviceError: "device error",
kIOReturnNoCompletion: "no completion routine",
kIOReturnAborted: "operation was aborted",
kIOReturnNoBandwidth: "bus bandwidth would be exceeded",
kIOReturnNotResponding: "device is not responding",
kIOReturnInvalid: "unanticipated driver error"
]
return map[status]
}
person
mattsven
schedule
16.09.2019