2013-02-19 60 views
3
if((err = ioctl(fd, IOC_CARD_LOCK, &lock)) < 0) 
{ 
    printf("ioctl failed and returned errno %d \n",err); 
} 

上述代碼是否正確並且是一種很好的編程習慣?它可以在我的電腦上編譯。 即它填充errioctl返回值,並檢查是否err< 0IOCTL調用和檢查返回值

是上述方法返回「ERR」由IOCTL返回的標準方法。

似乎有一些標準變量叫做errno? 這是什麼?這是否與上述相同?

回答

8

我發現了一個更好的方法來做到這一點。

if(ioctl(fd, IOC_CARD_LOCK, &lock) < 0) 
{ 
    printf("ioctl failed and returned errno %s \n",strerror(errno)); 
} 

錯誤號是被設置爲系統calls.and字符串錯誤的全局變量的代碼(一個負整數)轉換成有意義的字符串(「無效參數」例如)

1

只是偶然移到該響應。答案只是部分正確,因爲printf可能會覆蓋errno - 根據man頁面,它必須保存errno。所以一個更強大的答案是:

if(ioctl(fd, IOC_CARD_LOCK, &lock) < 0) 
{ 
    int errsv = errno; 
    printf("ioctl failed and returned errno %s \n",strerror(errsv)); 
}