2014-04-14 5 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를 부분적으로 읽을 수 없습니다. 그렇지 않으면 "Invalid argument"가 반환됩니다!

충분히 큰 바이트가있는 버퍼를 사용하십시오!