fsync 또는 fsync_range 서브루틴

용도

파일의 변경사항을 영구 스토리지에 기록합니다.

라이브러리

표준 C 라이브러리(libc.a)

구문

#include <unistd.h>

int fsync ( FileDescriptor)
int FileDescriptor;

int fsync_range (FileDescriptor, how, start, length)
int FileDescriptor;
int how;
off_t start;
off_t length;

설명

Fsync 하위 루틴은 FileDescriptor 매개변수로 지정된 열린 파일의 모든 수정된 데이터를 영구 저장소에 저장합니다. Fsync 서브루틴에서 돌아오면 모든 업데이트가 영구 저장소에 저장됩니다.

Fsync_range 하위 루틴은 FileDescriptor 매개변수로 지정된 열린 파일의 지정된 범위에서 수정된 모든 데이터를 영구 저장소에 저장합니다. Fsync_range 서브루틴에서 돌아오면 지정된 범위의 모든 업데이트가 영구 저장소에 저장됩니다.

이 단락은 JFS 파일 시스템에서만 사용할 수 있는 더 이상 사용되지 않는 기능에 대해 설명합니다. 프로세스가 지연 업데이트를 위해 연 파일( O_DEFER 플래그 사용)에 쓴 데이터는 다른 프로세스가 이 파일에 대해 fsync_range 또는 fsync 호출을 실행하거나 이 파일에서 동기식 쓰기 하위 루틴( O_SYNC 플래그 사용)을 실행할 때까지 영구 저장소에 쓰이지 않습니다. O_DEFER O_SYNC 플래그에 대한 설명은 각각 fcntl.h 파일과 오픈 서브루틴을 참조하세요.

참고: fsync 서브루틴이 실행되거나 호출에 실패할 때 FileDescriptor 매개변수로 식별된 파일은 쓰기를 위해 열려 있어야 합니다. 이 제한은 BSD 시스템에서는 적용되지 않았습니다. Fsync_range 서브루틴에는 쓰기 권한이 필요하지 않습니다.

매개변수

항목 설명
FileDescriptor 유효한 오픈 파일 디스크립터입니다.
방법 작업의 처리 특성을 지정합니다.
O_SYNC
<start, length> 매개변수로 지정된 범위의 수정된 데이터가 저장소에 기록됩니다. 메타데이터가 수정되면 수정된 모든 사용자 데이터가 저장소에 기록됩니다. 모든 메타데이터 변경 사항과 타임스탬프를 포함한 파일 속성도 저장소에 기록됩니다.
O_DSYNC
<start, length> 매개변수로 지정된 범위의 수정된 데이터가 저장소에 기록됩니다. 파일에 대한 수정된 메타데이터가 있는 경우 데이터를 읽는 데 필요한 경우 메타데이터도 기록됩니다. 그렇지 않으면 메타데이터 업데이트가 이루어지지 않습니다.
O_NOCACHE
수정된 데이터는 O_DSYNC 매개변수와 마찬가지로 기록됩니다. <시작, 길이> 매개변수로 지정된 범위의 전체 페이지가 메모리 캐시에서 제거됩니다. 페이지가 수정되지 않은 경우에도 캐시에서 제거됩니다. 이 작업은 읽기 전용으로 열려 있는 파일에서도 작동합니다.
시작 파일 오프셋 시작.
길이 길이, 또는 모든 캐시 데이터의 경우 0입니다.

리턴 값

성공적으로 완료되면 fsync 서브루틴은 0 값을 반환합니다. 그렇지 않으면 -1 값이 반환되고 errno 전역 변수가 오류를 나타내도록 설정됩니다.

성공적으로 완료되면 fsync_range 서브루틴은 0 값을 반환합니다. 그렇지 않으면 -1 값이 반환되고 errno 전역 변수가 오류를 나타내도록 설정됩니다.

오류 코드

다음 중 하나 이상에 해당하면 fsync 또는 fsync_range 서브루틴이 실패합니다:

항목 설명
EIO 파일 시스템에서 읽거나 쓰는 동안 I/O 오류가 발생했습니다.
EBADF FileDescriptor 매개변수가 쓰기 위해 열려 있는 유효한 파일 설명자가 아닙니다.
EINVAL 파일이 일반 파일이 아닙니다.
EINTR 서브루틴이 신호에 의해 중단되었습니다.