vmsplice(2) - wariua/manpages-ko GitHub Wiki
vmsplice - ์ฌ์ฉ์ ํ์ด์ง๋ฅผ ํ์ดํ์ ์ฐ๊ฒฐํ๊ธฐ
#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);
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
์์ ํ์ด์ง๋ฅผ ๋ณต์ฌํด์ผ ํ๋ค. ๋ฐ์ดํฐ์ ์์น์ ๊ธธ์ด ๋ชจ๋ ํ์ด์ง์ ๋ง๊ฒ ์ ๋ ฌ๋์ด ์์ด์ผ ํ๋ค.
์ฑ๊ณต ์๋ฃ ์ vmsplice()
๋ ํ์ดํ๋ก ์ ๋ฌํ ๋ฐ์ดํธ ์๋ฅผ ๋ฐํํ๋ค. ์ค๋ฅ ์ vmsplice()
๋ -1์ ๋ฐํํ๋ฉฐ ์ค๋ฅ๋ฅผ ๋ํ๋ด๋๋ก errno
๋ฅผ ์ค์ ํ๋ค.
EAGAIN
-
flags
์SPLICE_F_NONBLOCK
์ด ์ง์ ๋์์ผ๋ฉฐ ๋์์ด ๋ธ๋ก ๋๋ ค ํ๋ค. EBADF
-
fd
๊ฐ ์ ํจํ์ง ์๊ฑฐ๋ ํ์ดํ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ง ์๋ค. EINVAL
-
nr_segs
๊ฐIOV_MAX
๋ณด๋ค ํฌ๋ค. ๋๋SPLICE_F_GIFT
๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ๋ ฌ๋์ด ์์ง ์๋ค. ENOMEM
- ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ.
๋ฆฌ๋
์ค 2.6.17์์ vmsplice()
์์คํ
ํธ์ถ์ด ์ฒ์ ๋ฑ์ฅํ๋ค. glibc ๋ฒ์ 2.5์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์์ด ์ถ๊ฐ๋์๋ค.
์ด ์์คํ ํธ์ถ์ ๋ฆฌ๋ ์ค ์ ์ฉ์ด๋ค.
์ ๋ฌํ๋ ์กฐ๊ฐ ๊ฐ์ ์ ํ์ ์์ด์ vmsplice()
๋ ๋ค๋ฅธ ๋ฒกํฐ ๋ฐฉ์ ์ฝ๊ธฐ/์ฐ๊ธฐ ํจ์๋ค์ ๋ฐ๋ฅธ๋ค. ๊ทธ ์ ํ์ <limits.h>
์ ์ ์๋ IOV_MAX
์ด๋ค. ํ์ฌ ๊ทธ ์ ํ๊ฐ์ 1024์ด๋ค.
vmsplice()
๋ ์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ์์ ํ์ดํ ๋ฐฉํฅ์ผ๋ก๋ง ์ง์ง ์ฐ๊ฒฐ์ ์ง์ํ๋ค. ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก๋ ์ฌ์ค ์ฌ์ฉ์ ๊ณต๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ ๋ฟ์ด๋ค. ํ์ง๋ง ์๋ฐฉํฅ์ ์ง์ํด์ ์ธํฐํ์ด์ค๊ฐ ๊น๋ํ๊ฒ ๋์นญ์ด ๋๋ฉฐ ์ฌ๋๋ค์ด vmsplice()
๋ฅผ ์ด์ฉํ๋๋ก ํ๊ณ ํฅํ ์ฑ๋ฅ ๊ฐ์ ์ฌ์ง๋ฅผ ๋จ๊ธธ ์ ์๋ค.
2019-03-06