2014-04-14 62 views
1

我嘗試從一個fd讀取一些數據,但失敗並顯示錯誤消息「無效參數!」。閱讀失敗,錯誤消息「無效參數」

struct inotify_event eventHdr; 
int head_read_len = (int)read(ctx->fd, (void *)&eventHdr, sizeof(inotify_event)); 
    if(head_read_len == -1){ 
     _debug("read eventHdr failed!!!!\n"); 
     perror("read eventHdr!"); //Print "Invalid argument." 
    } 
    else{ 
     _debug("read eventHdr succeed!!!!, head_read_len:%d, name:%s\n", head_read_len, eventHdr.name); 
     lseek(ctx->fd, SEEK_CUR, -head_read_len); 

}

注:

  1. struct inotify_event用於inotify的系統調用,人的inotify瞭解更多詳情。

  2. fd保證是一個有效的inotify文件描述符。

什麼似乎是問題?任何寶貴的見解?

+3

確保在打印/解釋之前不要破壞'errno'的值。目前還不清楚'_debug(「read eventHdr failed !!!! \ n」)的代碼是否不會完全做到這一點。將調用放在'perror()'之前。 – alk

+0

謝謝。這是一個問題,但不是造成這種情況的原因。 – FaceBro

回答

2

原因是:inotify系統調用的fd不能被部分讀取,否則返回「無效參數」!

使用足夠大的字節的緩衝區!

相關問題