tail head cat sleep
QR code linking to this page

Man page  — SBUF

명칭

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 – 안전한 캐릭터 라인 포맷

내용

서식

#include <sys/types.h>
#include <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() 함수는 명시된 유저 공간 주소로부터 sbuflen 바이트를 카피합니다.

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 그리고 처음 등장했습니다.

저자

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

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


SBUF (9) January 28, 2001

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

This philosophy, in the hands of amateurs, leads to inexplicably mind-numbing botches like the existence of two programs, “head” and “tail,” which print the first part or the last part of a file, depending. Even though their operations are duals of one another, “head” and “tail” are different programs, written by different authors, and take different options!
— The Unix Haters' handbook