vmsplice(2) - wariua/manpages-ko GitHub Wiki

NAME

vmsplice - ์‚ฌ์šฉ์ž ํŽ˜์ด์ง€๋ฅผ ํŒŒ์ดํ”„์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ

SYNOPSIS

#define _GNU_SOURCE         /* feature_test_macros(7) ์ฐธ๊ณ  */
#include <fcntl.h>
#include <sys/uio.h>

ssize_t vmsplice(int fd, const struct iovec *iov,
                 unsigned long nr_segs, unsigned int flags);

DESCRIPTION

fd๊ฐ€ ์“ฐ๊ธฐ์šฉ์œผ๋กœ ์—ด๋ ค ์žˆ์œผ๋ฉด vmsplice() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ iov๊ฐ€ ๊ธฐ์ˆ ํ•˜๋Š” nr_segs ๊ฐœ ์‚ฌ์šฉ์ž ๋ฉ”๋ชจ๋ฆฌ ๋ฒ”์œ„๋ฅผ ํŒŒ์ดํ”„๋กœ ๋งคํ•‘ ํ•œ๋‹ค. fd๊ฐ€ ์ฝ๊ธฐ์šฉ์œผ๋กœ ์—ด๋ ค ์žˆ์œผ๋ฉด vmsplice() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ iov๊ฐ€ ๊ธฐ์ˆ ํ•˜๋Š” nr_segs ๊ฐœ ์‚ฌ์šฉ์ž ๋ฉ”๋ชจ๋ฆฌ ๋ฒ”์œ„๋ฅผ ํŒŒ์ดํ”„์—์„œ ์ฝ์€ ๋‚ด์šฉ์œผ๋กœ ์ฑ„์šด๋‹ค. ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ fd๋Š” ํŒŒ์ดํ”„๋ฅผ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•œ๋‹ค.

ํฌ์ธํ„ฐ iov๋Š” <sys/uio.h>์— ์ •์˜๋œ iovec ๊ตฌ์กฐ์ฒด์˜ ๋ฐฐ์—ด์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

struct iovec {
    void  *iov_base;        /* ์‹œ์ž‘ ์ฃผ์†Œ */
    size_t iov_len;         /* ๋ฐ”์ดํŠธ ์ˆ˜ */
};

flags ์ธ์ž๋Š” ๋‹ค์Œ ๊ฐ’์„ 0๊ฐœ ์ด์ƒ OR ํ•ด์„œ ๊ตฌ์„ฑํ•œ ๋น„ํŠธ ๋งˆ์Šคํฌ์ด๋‹ค.

SPLICE_F_MOVE
vmsplice()์—์„œ๋Š” ์“ฐ์ง€ ์•Š๋Š”๋‹ค. splice(2) ์ฐธ๊ณ .
SPLICE_F_NONBLOCK
I/O์—์„œ ๋ธ”๋ก ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ splice(2) ์ฐธ๊ณ .
SPLICE_F_MORE
ํ˜„์žฌ vmsplice()์— ์•„๋ฌด ํšจ๊ณผ๊ฐ€ ์—†์ง€๋งŒ ํ–ฅํ›„์— ๊ตฌํ˜„๋  ์ˆ˜๋„ ์žˆ๋‹ค. splice(2) ์ฐธ๊ณ .
SPLICE_F_GIFT
์‚ฌ์šฉ์ž ํŽ˜์ด์ง€๊ฐ€ ์ปค๋„์— ์ฃผ๋Š” ์„ ๋ฌผ์ด๋‹ค. ์‘์šฉ์—์„œ ๊ทธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ๋Œ€ ๋ณ€๊ฒฝํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋งŒ์•ฝ ๊ทธ๋Ÿฌ๋ฉด ํŽ˜์ด์ง€ ์บ์‹œ์™€ ๋””์Šคํฌ ์ƒ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ปค๋„์— ํŽ˜์ด์ง€๋ฅผ ์„ ๋ฌผํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ด์–ด์ง€๋Š” splice(2) SPLICE_F_MOVE์—์„œ ๊ทธ ํŽ˜์ด์ง€๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ด์–ด์ง€๋Š” splice(2) SPLICE_F_MOVE์—์„œ ํŽ˜์ด์ง€๋ฅผ ๋ณต์‚ฌํ•ด์•ผ ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜์™€ ๊ธธ์ด ๋ชจ๋‘ ํŽ˜์ด์ง€์— ๋งž๊ฒŒ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

RETURN VALUE

์„ฑ๊ณต ์™„๋ฃŒ ์‹œ vmsplice()๋Š” ํŒŒ์ดํ”„๋กœ ์ „๋‹ฌํ•œ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์˜ค๋ฅ˜ ์‹œ vmsplice()๋Š” -1์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋„๋ก errno๋ฅผ ์„ค์ •ํ•œ๋‹ค.

ERRORS

EAGAIN
flags์— SPLICE_F_NONBLOCK์ด ์ง€์ •๋˜์—ˆ์œผ๋ฉฐ ๋™์ž‘์ด ๋ธ”๋ก ๋˜๋ ค ํ•œ๋‹ค.
EBADF
fd๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ํŒŒ์ดํ”„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์ง€ ์•Š๋‹ค.
EINVAL
nr_segs๊ฐ€ IOV_MAX๋ณด๋‹ค ํฌ๋‹ค. ๋˜๋Š” SPLICE_F_GIFT๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.
ENOMEM
๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ.

VERSIONS

๋ฆฌ๋ˆ…์Šค 2.6.17์—์„œ vmsplice() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์ฒ˜์Œ ๋“ฑ์žฅํ–ˆ๋‹ค. glibc ๋ฒ„์ „ 2.5์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

CONFORMING TO

์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ๋ฆฌ๋ˆ…์Šค ์ „์šฉ์ด๋‹ค.

NOTES

์ „๋‹ฌํ•˜๋Š” ์กฐ๊ฐ ๊ฐœ์ˆ˜ ์ œํ•œ์— ์žˆ์–ด์„œ vmsplice()๋Š” ๋‹ค๋ฅธ ๋ฒกํ„ฐ ๋ฐฉ์‹ ์ฝ๊ธฐ/์“ฐ๊ธฐ ํ•จ์ˆ˜๋“ค์„ ๋”ฐ๋ฅธ๋‹ค. ๊ทธ ์ œํ•œ์€ <limits.h>์— ์ •์˜๋œ IOV_MAX์ด๋‹ค. ํ˜„์žฌ ๊ทธ ์ œํ•œ๊ฐ’์€ 1024์ด๋‹ค.

vmsplice()๋Š” ์‚ฌ์šฉ์ž ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํŒŒ์ดํ”„ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ง„์งœ ์—ฐ๊ฒฐ์„ ์ง€์›ํ•œ๋‹ค. ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ๋Š” ์‚ฌ์‹ค ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•  ๋ฟ์ด๋‹ค. ํ•˜์ง€๋งŒ ์–‘๋ฐฉํ–ฅ์„ ์ง€์›ํ•ด์„œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊น”๋”ํ•˜๊ฒŒ ๋Œ€์นญ์ด ๋˜๋ฉฐ ์‚ฌ๋žŒ๋“ค์ด vmsplice()๋ฅผ ์ด์šฉํ•˜๋„๋ก ํ•˜๊ณ  ํ–ฅํ›„ ์„ฑ๋Šฅ ๊ฐœ์„  ์—ฌ์ง€๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

SEE ALSO

splice(2), tee(2), pipe(7)


2019-03-06

โš ๏ธ **GitHub.com Fallback** โš ๏ธ