Linux karakter aygıtı sürücüsü tasarlıyorum. Ioctl() sistem çağrısında hata oluştuğunda errno ayarlamak istiyorum.Linux aygıt sürücüsünde errno nasıl ayarlanır?
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;
}
Bunu başarmak için ne yapmalıyım? Şimdiden teşekkür ederim!
Lütfen uygulamamı daha ayrıntılı açıklamama izin verin.
Cihazım/dev/myCharDev konumunda bulunuyor. Benim kullanıcı uzay uygulama şu şekildedir:
#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;
}
yukarıdaki yorumlar belirtildiği gibi, nasıl kendi aygıt sürücüsü kodlarında "errno" olarak ayarlayın ve kullanıcı uzay uygulama tarafından okunabilir yapmalıdır?
Soruma bir açıklama ekledim. –
@AndrewChang benim cevabımı – sestus
güncellendi Nice, teşekkürler! –