Sto progettando un driver di dispositivo di carattere Linux. Voglio impostare errno quando si verifica un errore nella chiamata di sistema ioctl().Come impostare errno nel driver di periferica 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;
}
Cosa devo fare per raggiungere questo obiettivo? Grazie in anticipo!
Per favore permettimi di spiegare la mia domanda con maggiori dettagli.
Il mio dispositivo si trova in/dev/myCharDev. La mia applicazione utente è simile a questo:
#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;
}
Come ho già detto nei commenti di cui sopra, come devo impostare il "errno" nei miei propri codici dei driver di dispositivo e renderlo leggibile da applicazione utente?
Aggiungo qualche spiegazione nella mia domanda. –
@AndrewChang ha aggiornato la mia risposta – sestus
Bello, grazie !!! –