Ich entwerfe einen Linux-Zeichengerätetreiber. Ich möchte Errno setzen, wenn Fehler in ioctl() Systemaufruf auftritt.Wie errno in Linux-Gerätetreiber festlegen?
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;
}
Was soll ich tun, um das zu erreichen? Danke im Voraus!
Bitte erlauben Sie mir, meine Anwendung mit mehr Details zu erklären.
Mein Gerät befindet sich in/dev/myCharDev. Meine Userspace-Anwendung ist wie folgt:
#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;
}
Wie ich oben in den Kommentaren erwähnt, Wie soll ich die „errno“ gesetzt in meinem eigenen Gerätetreiber-Codes und durch Userspace-Applikation lesbar machen?
Ich füge eine Erklärung in meine Frage. –
@AndrewChang hat meine Antwort aktualisiert – sestus
Schön, danke !!! –