2014-11-22 8 views
0
루프 동안

다음 예제 코드입니다 : 우리는 루프 동안 사용할 때 작동 방법을 이해 해달라고C 읽기() 및 쓰기()

int nbajt; int buf[]; 

//we opened file and get descriptor fd 

while((nbajt = read(fd, buf, 5)) > 0){ 
     if (write(fd2, buf, nlbajt) == -1){ 
      perror("ERROR"); 
      exit(1); 
     } 
    } 

. 이 루프가 몇 번 진행될 것인가? (buf의 길이?). nbajt는 1 또는 0 + buf 파일 위치의 값만 가질 수 있습니까? 각 루프 단계가 끝나면 1 자리가 변경됩니까? 그래서 첫 번째 단계에서 우리는 nlbajt = 1을 가지고 buf 첫 번째 위치 char을 취해 fd2에 씁니다. 결국 우리는 nlbajt==0을 가지므로 파일의 끝을 의미합니까? 내가 틀렸다는 것을 확인해 주셔서 고맙게 생각합니다. 나의 주요 관심사는 nbajt 가치가 어떻게 변하는가입니다. 그것은 이러한 태도에 대한 diffrent 얼마나 :

int read( int handle, void *buffer, int nbyte); 

그것은 바이트 수를 성공적으로 읽어 반환

nbajt = read(fd, buf, 5)); 
    write(fd2, buf, sizeof(a)); 
+5

인자와 반환 값을 이해할 수 있도록'read()'에 대한 문서를 읽었습니까? –

+0

나는 남자를 사용하고 있었다. 하지만 우리가 루프를 사용하지 않을 때만 나는 그것을 이해합니다. 읽은 바이트 수를 반환합니다. 나는 buf를 위해 거기에 변화를 만들었다. – user3402584

답변

2

읽기()는 아래의 프로토 타입이있다. EOF에 도달하면 0, 오류가 있으면 -1.

nlbajt = 0은 여기에 EOF를 의미합니다.

+0

나는 그것을 알고 있지만 while 루프를 사용할 때 무슨 일이 일어나고 있는가? 이 nlbajt는 어떻게 변화합니까? 이 루프가 몇 번이나 실행됩니까? – user3402584

+0

@ user3402584 EOF에 도달 할 때까지이 루프가 계속됩니다. 즉, 읽은 바이트 수가 0보다 커질 때까지 while 루프가 성공합니다. 귀하의 경우 그것은 각 루프에서 5Ytes이므로 EOF에 도달하면 read()가 0을 반환하므로 조건이 실패하고 루프를 종료합니다 – Gopi

+0

대단히 감사합니다! – user3402584