다음 플래그와 마스크는 : 데이터 손실은 여러 가지 방법으로 발생합니다. 한 가지 경우는 여러 프로세스가 시퀀싱 컨트롤 없이 동일한 레코드를 업데이트하려고 할 때 발생합니다. 여러 업데이트가 병렬로 발생할 수 있으며 마지막 작성기는 « 승리 ». 또 다른 경우는 재구성을 진행 중인 비트 트리 또는 기타 내부 목록 기반 데이터베이스입니다. 업데이트 프로세스에서 트리 세그먼트에 단독으로 사용하지 않으면 인덱스 블록이 분할, 압축, 삽입 또는 삭제될 때 다른 읽기 프로세스가 데이터베이스에서 손실될 수 있습니다. fcntl()은 많은 응용 프로그램에 유용하지만 지나치게 일반적인 것은 아니며 비트 트리 예제를 잘 처리하지 않습니다. 둘째, 권고 레코드 잠금을 사용 하 여 잠금 각 I/O 작업을 잠금 (또는 테스트) 및 잠금 해제 작업을 브래킷을 사용 하 여 프로세스가 필요 합니다. 적용 모드 파일 및 레코드 잠금을 사용하면 프로세스가 파일을 한 번 잠그고 모든 I/O 작업이 완료되면 잠금을 해제할 수 있습니다. 적용 모드 레코드 잠금은 향상될 수 있는 기반을 제공합니다.

예를 들어, 검색 가능한 잠금이 있습니다. 즉, 다른 프로세스가 파일을 읽을 수 있도록 프로세스가 파일을 잠글 수 있도록 메커니즘을 향상시킬 수 있지만 아무도 파일을 쓸 수 없습니다. cmd에 대한 추가 구현 정의 값은 에서 정의될 수 있습니다. 그들의 이름은 F_로 시작됩니다. 헤더는 fcntl() 및 open()함수에서 사용할 다음 요청 및 인수를 정의합니다. 다음 예제에서는 파일의 바이트 100~109에 잠금을 배치한 다음 나중에 제거하는 방법을 보여 줍니다. F_SETLK는 호환되지 않는 잠금이 다른 프로세스에 의해 유지되는 경우 프로세스가 기다릴 필요가 없도록 비차단 잠금 요청을 수행하는 데 사용됩니다. 대신 프로세스가 다른 작업을 수행 할 수 있습니다. 자문 파일 레코드 잠금이 효과적이려면 파일에 액세스할 수 있는 모든 프로세스가 파일에 대한 I/O를 수행하기 전에 자문 메커니즘을 협력하고 사용해야 합니다. 적용 모드 레코드 잠금은 모든 프로세스가 작동한다고 가정할 수 없는 경우에 중요합니다. 예를 들어 한 사용자가 편집기를 사용하여 두 번째 사용자가 동일한 파일을 업데이트하는 다른 프로세스를 실행하는 동시에 파일을 업데이트하고 두 프로세스 중 하나만 권고 잠금을 사용하는 경우 프로세스가 작동하지 않습니다.

적용 모드 레코드 잠금은 우발적인 충돌로부터 보호합니다. 이 예제에서는 HFS 파일의 처음 4바이트에 저장된 카운터를 업데이트합니다. fcntl의 레코드 잠금 기능을 사용하여 동일한 프로그램을 실행하는 두 프로세스가 파일을 동시에 업데이트하지 않도록 합니다. 【XSI】 헤더를 포함하면 및 의 모든 기호가 표시될 수도 있습니다. 일련의 F_NOTIFY 요청이 누적되며 arg의 이벤트가 이미 모니터링된 집합에 추가됩니다. 모든 이벤트에 대한 알림을 비활성화하려면 arg를 0으로 지정하는 F_NOTIFY 호출을 합니다. . 여러 시스템에는 l_sysid와 같은 구조형 무리에 더 많은 필드가 있습니다. 분명히 l_pid 만으로는 잠금을 유지하는 프로세스가 다른 컴퓨터에 있을 수 있다면 매우 유용하지 않을 것입니다. 구조대 무리 { … 짧은 l_type; /* 잠금 유형: F_RDLCK, F_WRLCK, F_UNLCK */ 짧은 l_whence; /* l_start를 해석하는 방법: SEEK_SET, SEEK_CUR, SEEK_END */ off_t l_start; /* 잠금에 대한 오프셋 시작 */ off_t l_len; /* 잠글 바이트 수 */ pid_t l_pid; /* 우리의 잠금을 차단 하는 프로세스의 PID (F_GETLK 만) */ …

Catégories :