Tôi đang thiết kế trình điều khiển thiết bị nhân vật Linux. Tôi muốn đặt errno khi lỗi xảy ra trong cuộc gọi hệ thống ioctl().Làm thế nào để thiết lập errno trong trình điều khiển thiết bị Linux?
long my_own_ioctl(struct file *file, unsigned int req, unsigned long arg)
{
long ret = 0;
BOOL isErr = FALSE;
// some operation
// ...
if (isErr) {
// set errno
// ... <--- What should I do?
ret = -1;
}
return ret;
}
Tôi nên làm gì để đạt được điều đó? Cảm ơn bạn trước!
Vui lòng cho phép tôi giải thích đơn đăng ký của mình chi tiết hơn.
Thiết bị của tôi nằm trong/dev/myCharDev. ứng dụng không gian sử dụng của tôi là như thế này:
#define _COMMAND (1)
#define _ERROR_COMMAND_PARAMETER (-1)
int main()
{
int fd = open("/dev/myCharDec", O_RDONLY);
int errnoCopy;
if (fd) {
if (ioctl(fd, _COMMAND, _ERROR_COMMAND_PARAMETER) < 0) { // should cause error in ioctl()
errnoCopy = errno;
printf("Oops, error occurred: %s\n", strerr(errnoCopy)); // I want this "errno" printed correctly
}
close(fd);
}
return 0;
}
Như tôi đã đề cập trong các ý kiến trên, Làm thế nào tôi nên đặt "errno" trong mã điều khiển thiết bị của riêng tôi và làm cho nó có thể đọc được bằng cách áp dụng không gian sử dụng?
Tôi thêm một số giải thích trong câu hỏi của mình. –
@AndrewChang đã cập nhật câu trả lời của tôi – sestus
Rất tốt, cảm ơn bạn !!! –