RECNO(3)

명칭
recno - 레코드 번호 데이타베이스에의 액세스 수법

서식
<sys/types.h> <db.h>

해설
dbopen() routine는, 데이타베이스 파일의 프로그램 라이브러리 인터페이스 그렇지만, 거기서 서포트되고 있는 파일 포맷의 1 개에, 레코드 번호 파일이 있습니다. 데이타베이스 액세스 수법의 일반 사항에 대해서는, dbopen(3) (을)를 참조해 주세요. 이 메뉴얼 페이지에서는, recno 의 고유 사항에 대해 설명합니다.

레코드 번호 데이터 구조는, 플랫 파일 포맷으로 보존된, 가변장 혹은 고정장의 레코드로, 논리 레코드 번호로 액세스 됩니다. 레코드 번호 5 가 존재한다고 하는 것은, 레코드 1 으로부터 레코드 4 가 존재하게 됩니다. 레코드 번호 1 을 삭제하면(자), 레코드 번호 5 는 레코드 번호 4 가 되어, 레코드 번호 1 의 뒤를 가리키고 있던 커서는, 1 레코드하에 쉬프트 합니다.

dbopen() 그리고 제공된다 recno 에의 액세스 수법으로 고유한 데이터 구조는, <db.h> 인클루드 파일로 이하와 같이 정의되고 있습니다.

    typedef struct {
    	u_long flags;
    	u_int cachesize;
    	u_int psize;
    	int lorder;
    	size_t reclen;
    	u_char bval;
    	char *bfname;
    } RECNOINFO;

이 구조체의 엘리먼트는, 이하와 같이 정의됩니다.

flags
    플래그치는, 이하의 값의 논리합 ( or )(을)를 취하는 것으로 지정됩니다.

    R_FIXEDLEN
        레코드는 고정장으로, 바이트로 단락지어지고 있지 않습니다. 구조체의 엘리먼트 reclen 하지만 레코드의 길이를 지정해, 구조체의 엘리먼트 bval 하지만 패드 캐릭터로서 사용됩니다. 데이타베이스에 삽입되었다 레코드는, reclen 바이트보다 작은 경우, 자동적으로 패드 됩니다.

    R_NOKEY
        dbopen() 하지만 지정하는 인터페이스에서는, 시퀀셜 레코드 검색으로, 호출측의 키와 데이터 구조의 양쪽 모두에 데이터가 들어갑니다. R_NOKEY 플래그를 지정하면(자), cursor routine가 없어도 키 구조에 데이터가 들어갑니다. 이것에 의해, 어플리케이션은, 중간에 존재하는 레코드 모든 것을 읽어들이지 않고 , 파일의 마지막 레코드를 꺼낼 수 있습니다.

    R_SNAPSHOT
        이 플래그는, 수정되어 있지 않은 레코드를 오리지날 파일로부터 읽어들이는 대신에, dbopen() 하지만 불려 갔을 경우에 파일 의 snapshot를 취하는 것을 요구합니다.

cachesize
    메모리캐슈의 최대 사이즈 (바이트 단위)입니다. 이 값은 참고 정도의 것 그리고, 액세스 수법은 에러가 되지 않고 더 이상의 메모리를 나누어 거절합니다. cachesize (을)를 0 으로 하면(자) (사이즈를 지정하지 않으면), 디폴트의 캐쉬가 사용됩니다.

psize
    recno 에의 액세스 수법은, 레코드의 메모리의 카피를 btree 에 보존합니다. 이 값은, 그 트리의 노드로 사용되는 페이지의 사이즈 (바이트 단위)입니다. psize 하지만 0 인 경우는 (페이지 사이즈가 지정되어 있지 않은 경우는), 기초가 되는 파일 시스템의 I/O 블록 사이즈에 따라 페이지 사이즈가 선택됩니다. 상세한 것에 대하여는, btree(3) (을)를 참조해 주세요.

lorder
    보존되고 있는 데이타베이스메타데이타의 정수의 바이트 오더 입니다. 정수의 오더를 수치로 표현할 필요가 있습니다. 예를 들어 빅 endian바이트 오더는, 4321 의 차례로 됩니다. lorder 하지만 0 인 경우는, (오더가 지정되어 있지 않은 경우는), 현행 호스트의 오더가 사용됩니다.

reclen
    고정장 레코드의 길이입니다.

bval
    가변장 레코드의 경우는, 레코드의 마지막을 마크 하는 단락 바이트로, 고정장 레코드의 경우는, 패드 캐릭터입니다. 값을 지정하지 않으면 가변장 레코드의 최후는 개행 (“\n”) 그리고 마크 되어 고정장 레코드는 스페이스에서 패드 됩니다.

bfname
    recno 액세스 수법은, 레코드의 메모리의 카피를 btree 에 보존합니다. NULL 이외의 bfname (은)는, btree 파일의 dbopen() 의 파일명으로서 지정되었는지와 같이, btree 파일의 이름을 지정합니다.

recno 에의 액세스 수법으로 사용하는 키와 데이터의 페어의 데이터 부분은, 그 다른 액세스 수법과 같습니다만, 키는 다릅니다. 키의 data 필드는, <db.h> 인클루드 파일로 정의된, 타입 recno_t 의 메모리 위치를 가리킨다 포인터가 아니면 안됩니다. 통상의 경우, 이 타입은, 시스템으로 사용할 수 있는 최대의 부호 없음 정수 타입입니다. 키의 size 필드는, 그 타입의 사이즈일 필요가 있습니다.

기초가 된다 recno 액세스 수법 파일에서는, 메타데이타를 관련지을 수 없기 때문에, 기본값에 대한 변경 내용 (예를 들어 레코드의 고정장이나 바이트 단락치)는, 파일을 열 때마다 명확하게 지정한다 필요가 있습니다.

dbopen() 하지만 지정하는 인터페이스에서는, put 인터페이스를 사용해 새로운 레코드를 작성하면(자), 레코드 번호가, 현재의 데이타베이스의 최대 레코드보다 1 이상 큰 경우, 복수의 하늘의 레코드가 작성됩니다.

에러
recno 액세스 수법 routine가 에러가 되면(자), 프로그램 라이브러리 routine dbopen(3) (으)로 지정된 에러나 이하의 에러에 errno 하지만 설정됩니다.

[EINVAL]
    고정장 데이타베이스에, 너무 큰 레코드를 추가하려고 했습니다.

관련 항목
btree(3), dbopen(3), hash(3), mpool(3) Document Processing in a Relational Database System, Michael Stonebraker, Heidi Stettner, Joseph Kalash, Antonin Guttman, Nadene Lynn, Memorandum No. UCB/ERL M82/32, May 1982.

버그
빅 endian의 바이트 오더와 little endian의 아르바이트 오더만 하지만 서포트되고 있습니다.