SBUF(9)

명칭
sbuf_new, sbuf_clear, sbuf_setpos, sbuf_bcat, sbuf_bcopyin, sbuf_bcpy, sbuf_cat, sbuf_copyin, sbuf_cpy, sbuf_printf, sbuf_vprintf, sbuf_putc, sbuf_trim, sbuf_overflowed, sbuf_finish, sbuf_data, sbuf_len, sbuf_delete - 안전한 캐릭터 라인 포맷

서식
<sys/types.h> <sys/sbuf.h> struct sbuf * sbuf_new(struct sbuf *s, char *buf, int length, int flags) void sbuf_clear(struct sbuf *s) int sbuf_setpos(struct sbuf *s, int pos) int sbuf_bcat(struct sbuf *s, const char *str, size_t len) int sbuf_bcopyin(struct sbuf *s, const void *uaddr, size_t len) int sbuf_bcpy(struct sbuf *s, const char *str, size_t len) int sbuf_cat(struct sbuf *s, const char *str) int sbuf_copyin(struct sbuf *s, const void *uaddr, size_t len) int sbuf_cpy(struct sbuf *s, const char *str) int sbuf_printf(struct sbuf *s, const char *fmt, ...) int sbuf_vprintf(struct sbuf *s, const char *fmt, va_list ap) int sbuf_putc(struct sbuf *s, int c) int sbuf_trim(struct sbuf *s) int sbuf_overflowed(struct sbuf *s) void sbuf_finish(struct sbuf *s) char * sbuf_data(struct sbuf *s) int sbuf_len(struct sbuf *s) void sbuf_delete(struct sbuf *s)

해설
sbuf 패밀리의 함수는, 커널 공간내의 경계가 있는 눌 종단 캐릭터 라인의, 안전한 할당해 구축, 및 해방을 가능하게 합니다. 이러한 함수는, 캐릭터의 배열 대신에, <sys/sbuf.h> 그리고 정의된다 sbuf (으)로 불리는 구조체를 조작합니다.

sbuf_new() 함수는 최초의 인수로 가리켜진다 sbuf (을)를 초기화합니다. 그 포인터가 NULL 의 경우에는, sbuf_new() 하 struct sbuf 구조체를 malloc(9) (을)를 사용해 할당합니다. buf 인수는 실제로 캐릭터 라인이 격납되는 버퍼에의 포인터로, NULL 의 경우에는, sbuf_new() 하 malloc(9) (을)를 사용해 버퍼를 할당합니다. length (은)는 격납 버퍼의 초기의 크기입니다. 4 번째의 인수 flags (은)는 이하의 플래그로부터 구성될 수 있습니다:

SBUF_FIXEDLEN
    격납 버퍼는 초기 사이즈로 고정입니다. 이것을 넘어 sbuf 를 확장하려고 하면(자), 오버플로우 상태가 됩니다.

SBUF_AUTOEXTEND
    이것은, 추가 데이터의 격납을 위해서(때문에) 필요하면, 자원이 허락하는 한에 두어, 격납 버퍼는 확장 가능한 것을 나타냅니다.

buf 하지만 NULL (이)가 아닌 경우에는, 적어도 length 캐릭터 이상의 배열을 가리키지 않으면 안 되는 것에 주의해 주세요. 제공되는 버퍼의 내용은 미정도리입니다. sbuf 데이타를 뽑기 시작하기 위해서(때문에)는, 완료했다 sbuf 에 대해서 sbuf_data() (을)를 호출할 필요가 있습니다.

sbuf_clear() 함수는 sbuf 의 내용을 무효로 해, 위치를 0 에 리셋트 합니다.

sbuf_setpos() 함수는 sbuf 의 종료 위치를, 0 으로 격납 버퍼의 크기보다 1 작은 값의 사이의 값이다 pos (으)로 설정합니다. 결과적으로, 새로운 위치에 있어 sbuf 의 첨단을 잘라 버리게 됩니다.

sbuf_bcat() 함수는 바이트열 str 의 최초의 len 바이트를 sbuf 에 추가합니다.

sbuf_bcopyin() 함수는 명시된 유저 공간 주소로부터 sbuf 에 len 바이트를 카피합니다.

sbuf_bcpy() 함수는 sbuf 의 내용을 바이트열 str 의 최초의 len 바이트로 옮겨놓습니다.

sbuf_cat() 함수는 NUL 캐릭터로 종단 된 캐릭터 라인 str (을)를 sbuf 의 현재 위치에 추가합니다.

sbuf_copyin() 함수는 NUL 캐릭터로 종단 된 캐릭터 라인이 명시된 유저 공간 주소로부터 sbuf 에 카피합니다. len 인수가 0 이 아닌 경우에는 len 캐릭터를 넘지 않는 캐릭터 (종단의 NUL 는 세지 않습니다)가 카피되어 그렇지 않은 경우에는 캐릭터 라인 전체, 또는 sbuf 에 담는 것이 가능한 한의 캐릭터를 카피합니다.

sbuf_cpy() 함수는 sbuf 의 내용을 NUL 캐릭터로 종단 된 캐릭터 라인 str 그리고 옮겨놓습니다. 이것은 새롭다 sbuf 그리고, 또는 sbuf_clear() 인가 sbuf_setpos() 그리고 그 위치를 0 에 리셋트 되고 있다 sbuf 그리고, sbuf_cat() (을)를 호출하는 것으로 등가입니다.

sbuf_printf() 함수는 fmt 에 의해 가리켜지고 있는 포맷 캐릭터 라인에 따라 그 인수를 포맷 해, 그 결과의 캐릭터 라인을 sbuf 의 현재 위치에 추가합니다.

sbuf_vprintf() 함수는 sbuf_printf() (와)과 같게 행동합니다만, 인수가 가변장 인수 리스트 ap (으)로부터 취득되는 것이 다릅니다.

sbuf_putc() 함수는 캐릭터 c (을)를 sbuf 의 현재 위치에 추가합니다.

sbuf_trim() 함수는 말미의 공백을 sbuf (으)로부터 제거합니다.

sbuf_overflowed() 함수는 sbuf 하지만 오버플로우 하고 있는 경우에 0 이외의 값을 돌려줍니다.

sbuf_finish() 함수는 sbuf (을)를 눌로 종단 해, 더 이상 sbuf_setpos(), sbuf_cat(), sbuf_cpy(), sbuf_printf() 또는 sbuf_putc() (을)를 사용해 수정되는 것이 없는 일을 의미하는 완료 마크를 붙입니다.

sbuf_data() 및 sbuf_len() 함수는 각각 현재의 캐릭터 라인과 그 길이를 돌려줍니다. sbuf_data() (은)는 완료했다 sbuf 에 대해서만 기능합니다.

마지막으로, sbuf_delete() 함수는 sbuf (을)를 클리어 해, sbuf_new() 에 의해 격납 버퍼를 할당할 수 있고 있으면, 그것을 해방합니다.

주
어느 조작이 sbuf (을)를 오버플로우 시켰을 경우에는, 그 sbuf 하지만 sbuf_finish() (을)를 사용해 완료 당한다, 또는 sbuf_clear() (을)를 사용해 리셋트 된다, 또는 sbuf_setpos() (을)를 사용해 그 위치를 0 으로부터 격납 버퍼의 크기보다 1 작은 값까지의 값에 리셋트 된다, 또는 sbuf_cpy() (을)를 사용해 충분히 짧은 캐릭터 라인에 초기화될 때까지 는, 후에 계속되는 대부분의 그 sbuf 에 대한 조작은 실패하겠지요.

반환값
sbuf_new() (은)는 격납 버퍼의 할당해에 실패했을 경우에는 NULL (을)를 돌려주어, 그렇지 않은 경우에는 새롭다 sbuf 에의 포인터를 돌려줍니다.

sbuf_setpos() 하 pos 하지만 부정한 경우에는 -1 을 돌려주어, 그렇지 않은 경우에는 0 을 돌려줍니다.

sbuf_cat(), sbuf_cpy(), sbuf_printf(), sbuf_putc(), sbuf_trim() (은)는 모두 버퍼가 오버플로우 했을 경우에는 -1 을 돌려주어, 그렇지 않은 경우에는 0 을 돌려줍니다.

sbuf_overflowed() (은)는 버퍼가 오버플로우 하고 있는 경우에는 0 이외에 값을 돌려주어, 그렇지 않은 경우에는 0 을 돌려줍니다.

sbuf_data() 및 sbuf_len() (은)는 버퍼가 오버플로우 하고 있는 경우에는, 각각 NULL 및 -1 을 돌려줍니다.

관련 항목
printf(3), strcat(3), strcpy(3), copyin(9), copyinstr(9), printf(9)

역사
sbuf 패밀리의 함수는 FreeBSD 4.4 그리고 처음 등장했습니다.

저자
-nosplit sbuf 패밀리의 함수는 Poul-Henning Kamp <phk@FreeBSD.org> 하지만 설계해, Dag-Erling Coïdan Smørgrav <des@FreeBSD.org> 하지만 실장했습니다. 추가의 개량은 Justin T. Gibbs <gibbs@FreeBSD.org> 하지만 제안했습니다. 자동 확장 서포트는 Kelly Yancey <kbyanc@FreeBSD.org> 하지만 추가했습니다.

이 메뉴얼 페이지는 Dag-Erling Coïdan Smørgrav 하지만 썼습니다.