Я разрабатываю драйвер символьного устройства 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» в моих собственных кодах драйверов устройств и сделать их доступными для чтения приложениям пользовательского пространства?