Я разрабатываю драйвер персонального устройства Linux. Я хочу установить errno при возникновении ошибки в системном вызове ioctl().
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;
}
Что я должен сделать для этого? Спасибо вам заранее!
Пожалуйста, позвольте мне более подробно объяснить свое выражение.
Мое устройство расположено в /dev/myCharDev. Приложение моего пользовательского пространства выглядит так:
#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;
}
Как я уже упоминал в комментариях выше, как мне установить " errno " в моих собственных кодах драйверов устройства и сделать его доступным для чтения при использовании пользовательского пространства?