그래서 파일 페이지 관리자 프로그램에 대해 다음 기능을 코딩해야하지만 null 종료 기능을 처리하는 방법을 이해할 수 없습니다.파일 페이지 관리자 프로그램의 기능 이해
RC insertRecord(FileHandle &fileHandle, const vector<Attribute>
&recordDescriptor, const void *data, RID &rid)
제공된 레코드 설명자를 사용하여 제공된 핸들에 의해 식별 된 파일에 새 레코드를 삽입하십시오. 은 입력이 항상 정확하고 오류가 없다고 가정 할 수 있습니다. 즉, 을 확인하지 않아도 입력 레코드에 올바른 속성 수가 있는지 또는 속성 유형이 일치하는지 확인할 수 있습니다. 그러나 속성에서 NULL 값을 처리하기 위해 * 데이터의 첫 번째 부분에는 에 대한 각 바이트에 대한 정보를 전달하는 n 바이트가 포함됩니다. n 값은 수식을 사용하여 계산할 수 있습니다. ceil (레코드의 필드 수/8). 예를 들어 5 개의 필드가있는 경우 ceil (5/8) = 1 바이트입니다. 필드가 20 개인 경우 크기는 ceil (20/8) = 3 바이트가됩니다. 첫 번째 바이트 의 맨 왼쪽 비트는 첫 번째 필드에 해당합니다. 첫 번째 바이트의 가장 오른쪽 비트는 여덟 번째 필드에 해당합니다. 필드가 8 개 이상인 경우 두 번째 바이트의 가장 왼쪽 비트는 9 번째 필드 에 해당합니다. 각 필드의 해당 비트가 1로 설정된 경우 실제 데이터에는 이 필드에 대한 값이 포함되어 있지 않습니다. 예를 들어 레코드에 세 개의 필드가 있고 두 번째 필드에 NULL이 들어있는 경우 바이트의 비트 표현은 0100000입니다. 또한 실제 데이터에서 들어오는 레코드는 첫 번째와 세 번째 값만 포함합니다. 즉,이 경우 첫 번째 필드 값 바로 뒤에있는 세 번째 필드 값은 입니다.
우리는 3 개의 속성을 가지면 3/8 = 3 바이트이므로 데이터의 처음 3 바이트는 null 기능에 해당합니다. 그러나 우리는이 바이트를 C++의 비트로 변환하는 방법을 알고 있으므로 실제로 null 값의 위치를 볼 수 있습니다.