fsync 함수 예제


라이브러리 함수에 대한 호출은 다른 함수 호출과 같습니다. 인수는 프로세서 레지스터 또는 스택에 배치되며 실행은 일반적으로 로드된 공유 라이브러리에 있는 함수 코드의 시작 부분으로 전송됩니다. fsync() 함수는 계속하기 전에 파일을 수정해야 하는 프로그램에서 사용해야 합니다. 예를 들어 간단한 트랜잭션 기능이 포함된 프로그램은 트랜잭션으로 인해 발생한 파일이나 파일에 대한 모든 수정 사항을 기록하도록 하는 데 사용할 수 있습니다. 지금까지 는 명령줄 옵션 구문 분석, 프로세스 조작 및 메모리 매핑과 같은 시스템 관련 기능을 수행하기 위해 프로그램에서 호출할 수 있는 다양한 함수를 제시했습니다. 후드 아래를 보면 이러한 함수가 구현 되는 방법에 따라 두 가지 범주로 나뉩니다. fsync() 함수는 버퍼 캐시에서 데이터를 물리적으로 작성하도록 하고 시스템 충돌 또는 기타 오류가 발생한 후 fsync() 호출 시점까지의 모든 데이터가 디스크에 기록되도록 하기 위한 것입니다. „버퍼 캐시“, „시스템 크래시“, „물리적 쓰기“ 및 „비휘발성 저장소“의 개념이 여기에 정의되어 있지 않으므로 표현이 더 추상적이어야 합니다. 리눅스는 현재 약 200 개의 다른 시스템 호출을 제공합니다. 리눅스 커널의 버전에 대한 시스템 호출 목록은 /usr/include/asm/unistd.h에 있습니다.

이들 중 일부는 시스템에서 내부적으로 사용하기 위한 것이며 다른 일부는 특수 라이브러리 함수를 구현하는 데만 사용됩니다. 이 장에서는 응용 프로그램 및 시스템 프로그래머에게 가장 유용할 수 있는 시스템 호출을 소개합니다. fsync() 함수는 fildes에 의해 명명된 열린 파일 설명자에 대한 모든 데이터를 fildes에 의해 설명된 파일과 연결된 저장 장치로 전송하도록 요청해야 합니다. 전송의 특성은 구현 정의입니다. fsync() 함수는 시스템이 해당 작업을 완료하거나 오류가 감지될 때까지 반환되지 않습니다. 이 함수의 반환 값은 ssize_t 형식이며 실제로 작성된 바이트 수를 나타냅니다. 이는 세 번째 매개 변수(쓸 바이트 수)와 같을 수 있지만 더 적을 수 있습니다. 항상 루프에서 write를 호출하고 모든 데이터가 기록될 때까지 루프를 반복해야 합니다. 오류가 있으면 쓰기 -1을 반환합니다. 쓰기 함수는 일반적인 파일 이름 오류뿐만 아니라 시스템 변수 errno에서 다음과 같은 오류 코드를 반환합니다. (일반적인 파일 이름 오류 참조)를 참조하십시오. 이 함수는 파일 동기화 옵션의 일부로 표시됩니다.