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

NAME

splice - ํŒŒ์ดํ”„์— ๋ฐ์ดํ„ฐ ์ด์–ด ๋ถ™์ด๊ธฐ

SYNOPSIS

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

ssize_t splice(int fd_in, loff_t *off_in, int fd_out,
               loff_t *off_out, size_t len, unsigned int flags);

DESCRIPTION

splice()๋Š” ์ปค๋„ ์ฃผ์†Œ ๊ณต๊ฐ„๊ณผ ์‚ฌ์šฉ์ž ์ฃผ์†Œ ๊ณต๊ฐ„ ์‚ฌ์ด ๋ณต์‚ฌ ์—†์ด ๋‘ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธด๋‹ค. ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ fd_in์—์„œ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ fd_out์œผ๋กœ ์ตœ๋Œ€ len ๋ฐ”์ดํŠธ๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋™์‹œํ‚ค๋Š”๋ฐ, ๋‘ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ์ค‘ ํ•˜๋‚˜๋Š” ํŒŒ์ดํ”„๋ฅผ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•œ๋‹ค.

fd_in๊ณผ off_in์— ๋‹ค์Œ ์˜๋ฏธ๋ก ์ด ์ ์šฉ๋œ๋‹ค.

  • fd_in์ด ํŒŒ์ดํ”„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด off_in์ด NULL์ด์–ด์•ผ ํ•œ๋‹ค.

  • fd_in์ด ํŒŒ์ดํ”„๋ฅผ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๊ณ  off_in์ด NULL์ด๋ผ๋ฉด ํŒŒ์ผ ์˜คํ”„์…‹๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ fd_in์—์„œ ๋ฐ”์ดํŠธ๋“ค์„ ์ฝ์–ด ๋“ค์ด๋ฉฐ, ํŒŒ์ผ ์˜คํ”„์…‹์„ ์ ์ ˆํžˆ ์กฐ์ •ํ•œ๋‹ค.

  • fd_in์ด ํŒŒ์ดํ”„๋ฅผ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๊ณ  off_in์ด NULL์ด ์•„๋‹ˆ๋ผ๋ฉด off_in์€ fd_in์—์„œ ๋ฐ”์ดํŠธ๋“ค์„ ์ฝ์–ด ๋“ค์ด๊ธฐ ์‹œ์ž‘ํ•  ์˜คํ”„์…‹์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฒ„ํผ๋ฅผ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” fd_in์˜ ํŒŒ์ผ ์˜คํ”„์…‹์„ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€ ๋‚ด์šฉ์ด fd_out๊ณผ off_out์— ์ ์šฉ๋œ๋‹ค.

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

SPLICE_F_MOVE
ํŽ˜์ด์ง€ ๋ณต์‚ฌ ๋Œ€์‹  ์ด๋™์„ ์‹œ๋„ํ•œ๋‹ค. ์ปค๋„์—๊ฒŒ ์ฃผ๋Š” ํžŒํŠธ์ผ ๋ฟ์ด๋‹ค. ํŒŒ์ดํ”„์˜ ํŽ˜์ด์ง€๋ฅผ ์ปค๋„์ด ์˜ฎ๊ธธ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ํŒŒ์ดํ”„ ๋ฒ„ํผ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŽ˜์ด์ง€๊ฐ€ ๊ฐ€๋“ ์ฐจ ์žˆ์ง€ ์•Š์œผ๋ฉด ์—ฌ์ „ํžˆ ํŽ˜์ด์ง€๋ฅผ ๋ณต์‚ฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ์˜ ์ดˆ๊ธฐ ๊ตฌํ˜„์— ๋ฒ„๊ทธ๊ฐ€ ๋งŽ์•˜๊ณ , ๊ทธ๋ž˜์„œ ๋ฆฌ๋ˆ…์Šค 2.6.21๋ถ€ํ„ฐ๋Š” no-op์ด๋‹ค. (splice() ํ˜ธ์ถœ์—์„œ๋Š” ๊ณ„์† ํ—ˆ์šฉํ•œ๋‹ค.) ํ–ฅํ›„์— ์ œ๋Œ€๋กœ ๋œ ๊ตฌํ˜„์œผ๋กœ ๋˜์‚ด์•„๋‚  ์ˆ˜๋„ ์žˆ๋‹ค.
SPLICE_F_NONBLOCK
I/O์—์„œ ๋ธ”๋ก ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํŒŒ์ดํ”„ ์ด์–ด ๋ถ™์ด๊ธฐ ๋™์ž‘์„ ๋…ผ๋ธ”๋ก ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ž˜๋„ splice()๊ฐ€ ๋ธ”๋ก ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด์–ด ๋ถ™์ด๋Š” ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์—์„œ (O_NONBLOCK ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด) ๋ธ”๋ก ํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
SPLICE_F_MORE
์ด์–ด์ง€๋Š” splice()๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋” ์˜ฌ ์˜ˆ์ •์ด๋‹ค. fd_out์ด ์†Œ์ผ“์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•œ ํžŒํŠธ์ด๋‹ค. (send(2)์˜ MSG_MORE ์„ค๋ช…๊ณผ tcp(7)์˜ TCP_CORK ์„ค๋ช… ์ฐธ๊ณ .)
SPLICE_F_GIFT
splice()์—์„œ๋Š” ์“ฐ์ง€ ์•Š๋Š”๋‹ค. vmsplice(2) ์ฐธ๊ณ .

RETURN VALUE

์„ฑ๊ณต ์™„๋ฃŒ ์‹œ splice()๋Š” ํŒŒ์ดํ”„์— ์ด์–ด ๋ถ™์ธ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋ฐ˜ํ™˜ ๊ฐ’ 0์€ ์ž…๋ ฅ ๋์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. fd_in์ด ํŒŒ์ดํ”„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด๋™์‹œํ‚ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์—ˆ์œผ๋ฉฐ ํŒŒ์ดํ”„์˜ ์“ฐ๊ธฐ ์ชฝ์— ์—ฐ๊ฒฐ๋œ ์“ฐ๊ธฐ ์ˆ˜ํ–‰์ž๊ฐ€ ์—†์–ด์„œ ๋ธ”๋ก ํ•˜๋Š” ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์—†์—ˆ์Œ์„ ๋œปํ•œ๋‹ค.

์˜ค๋ฅ˜ ์‹œ splice()๋Š” -1์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋„๋ก errno๋ฅผ ์„ค์ •ํ•œ๋‹ค.

ERRORS

EAGAIN
flags์— SPLICE_F_NONBLOCK์ด ์ง€์ •๋˜์—ˆ๊ฑฐ๋‚˜ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋“ค ์ค‘ ํ•˜๋‚˜์— ๋…ผ๋ธ”๋กœํ‚น ํ‘œ์‹œ(O_NONBLOCK)๊ฐ€ ๋ผ ์žˆ๋Š”๋ฐ ๋™์ž‘์ด ๋ธ”๋ก ๋˜๋ ค ํ•œ๋‹ค.
EBADF
ํ•œ์ชฝ ๋‚ด์ง€ ์–‘์ชฝ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ฝ๊ธฐ-์“ฐ๊ธฐ ๋ชจ๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š๋‹ค.
EINVAL
๋Œ€์ƒ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ์ด์–ด ๋ถ™์ด๊ธฐ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
EINVAL
๋Œ€์ƒ ํŒŒ์ผ์ด ๋ง๋ถ™์ด๊ธฐ ๋ชจ๋“œ๋กœ ์—ด๋ ค ์žˆ๋‹ค.
EINVAL
์–ด๋А ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋„ ํŒŒ์ดํ”„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์ง€ ์•Š๋‹ค.
EINVAL
ํƒ์ƒ‰ ๋ถˆ๊ฐ€๋Šฅ ์žฅ์น˜(๊ฐ€๋ น ํŒŒ์ดํ”„)์— ์˜คํ”„์…‹์„ ์ฃผ์—ˆ๋‹ค.
EINVAL
fd_in๊ณผ fd_out์ด ๊ฐ™์€ ํŒŒ์ดํ”„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค.
ENOMEM
๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ.
ESPIPE
off_in์ด๋‚˜ off_out์ด NULL์ด ์•„๋‹Œ๋ฐ ๋Œ€์‘ํ•˜๋Š” ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๊ฐ€ ํŒŒ์ดํ”„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค.

VERSIONS

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

CONFORMING TO

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

NOTES

์„ธ ๊ฐ€์ง€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ splice(), vmsplice(2), tee(2)๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ž„์˜ ์ปค๋„ ๋ฒ„ํผ๋ฅผ ์™„์ „ํžˆ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ ๋ฒ„ํผ๋Š” ์ปค๋„ ๋‚ด์—์„œ ํŒŒ์ดํ”„์— ์“ฐ๋Š” ๋ฒ„ํผ์™€ ๊ฐ™์€ ํƒ€์ž…์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ๋“ค์€ ๋Œ€๋žต ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

splice()
๋ฒ„ํผ์—์„œ ์ž„์˜ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋กœ, ๋˜๋Š” ๋ฐ˜๋Œ€๋กœ, ๋˜๋Š” ํ•œ ๋ฒ„ํผ์—์„œ ๋‹ค๋ฅธ ๋ฒ„ํผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธด๋‹ค.
tee(2)
ํ•œ ๋ฒ„ํผ์—์„œ ๋‹ค๋ฅธ ๋ฒ„ํผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ "๋ณต์‚ฌ"ํ•œ๋‹ค.
vmsplice(2)
์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ๋ฒ„ํผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ "๋ณต์‚ฌ"ํ•œ๋‹ค.

๋ณต์‚ฌ๋ผ๊ณ  ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์‹ค์ œ ๋ณต์‚ฌ๋ฅผ ํ”ผํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ปค๋„์—์„œ๋Š” ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ฐธ์กฐ ์นด์šดํŠธ ํฌ์ธํ„ฐ๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ํŒŒ์ดํ”„ ๋ฒ„ํผ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. ํŽ˜์ด์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” (์ถœ๋ ฅ ๋ฒ„ํผ๋ฅผ ์œ„ํ•œ) ์ƒˆ ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์œผ๋กœ ๋ฒ„ํผ ๋‚ด์— ํŽ˜์ด์ง€ "์‚ฌ๋ณธ"์„ ์ƒ์„ฑํ•œ๋‹ค. ์ฆ‰, ๋ฒ„ํผ ํŽ˜์ด์ง€๊ฐ€ ์•„๋‹ˆ๋ผ ํฌ์ธํ„ฐ๋งŒ ๋ณต์‚ฌํ•œ๋‹ค.

๋ฆฌ๋ˆ…์Šค 2.6.30 ๋ฐ ์ด์ „์—์„œ๋Š” fd_in๊ณผ fd_out ์ค‘ ํ•œ์ชฝ๋งŒ ํŒŒ์ดํ”„์—ฌ์•ผ ํ–ˆ๋‹ค. ๋ฆฌ๋ˆ…์Šค 2.6.31๋ถ€ํ„ฐ ๋‘ ์ธ์ž ๋ชจ๋‘ ํŒŒ์ดํ”„๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

EXAMPLE

tee(2) ์ฐธ๊ณ .

SEE ALSO

copy_file_range(2), sendfile(2), tee(2), vmsplice(2), pipe(7)


2019-05-09

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