유닉스 파일 버퍼링을 켜고 끄기위한 간단한 C 프로그램을 작성했습니다. 아래의 코드는 그것을 켜는 것입니다. 나는 fcntl을 사용하여 설정을 얻고, O_SYNC 플래그를 설정 한 다음 설정을 다시 커널에 기록합니다. 하지만 다시 설정을 가져 오면 O_SYNC 플래그가 설정되지 않습니다.fcntl : 디스크 버퍼링 켜기 및 끄기
int result, s;
s = fcntl(*fd, F_GETFL);
s |= O_SYNC; // set SYNC bit
result = fcntl(*fd, F_SETFL, s);
if(result == -1)
perror("setting SYNC");
else
{
// Check buffering is on
s = fcntl(*fd, F_GETFL); //
if((s & O_SYNC) == O_SYNC) // check if SYNC bit is set
printf("In function buffering_off(): Buffering is OFF\n");
else
printf("In function buffering_off(): Buffering is ON\n");
}
어떤 도움을 주시면 감사하겠습니다. 건배 :) 나는 리눅스 커널의 목록이 토론을 발견
커널 버전도 확인해야합니다. http://milek.blogspot.de/2010/12/linux-osync-and-write-barriers.html에 따르면이 기능은 2.6.31에서만 도입되었습니다. – vissi2