2010-05-21 5 views
0

나는 비 블로킹 (non-blocking) 일 수있는 읽기 용으로 열린 파일 디스크립터를 가지고있다. 필자가해야 할 일은 EOF에 도달 할 때까지 모든 데이터를 읽고 쓰기 가능한 파일 설명자에 해당 데이터를 쓰는 것입니다. 이 복사를 수행하는 프로세스가 주변에서 진행되는 작업을 "인식"하지 못하기 때문에 데이터를 기다리는 동안 유용한 작업을 수행 할 수 있다고 생각하지 않으며 루프를 사용하지 않으려 고합니다 (while (while while whileerrnoEAGAIN이 아닙니다. 낭비 일 것이라고 생각하기 때문입니다. 데이터를 사용할 수있을 때까지 복사 프로세스의 실행을 차단하거나 정지시키는 방법이 있습니까? 리눅스 SCSI 일반 (SG) HOWTO의EAGAIN 이후 강제 차단 읽기?

답변

3

귀하의 다른 대답은 간단 차단 파일을 다시 설정 O_NONBLOCK을 설정하지 않아. 그것은 당신의 상황에서 효과가 있다면 완벽하게 괜찮습니다. 그렇지 않은 경우 select()을 사용하여 비 차단 파일 설명자가 읽을 수있을 때까지 차단할 수 있습니다.

2

7 장에서는이 작업을 수행하는 방법의 an example 제공 :

int flags = fcntl(fd, F_GETFL); 
fcntl(fd, F_SETFL, flags & (~O_NONBLOCK));