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

NAME

readv, writev, preadv, pwritev, preadv2, pwritev2 - ์—ฌ๋Ÿฌ ๋ฒ„ํผ๋กœ ๋ฐ์ดํ„ฐ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๊ธฐ

SYNOPSIS

#include <sys/uio.h>

ssize_t readv(int fd, const struct iovec *iov, int iovcnt);

ssize_t writev(int fd, const struct iovec *iov, int iovcnt);

ssize_t preadv(int fd, const struct iovec *iov, int iovcnt,
               off_t offset);

ssize_t pwritev(int fd, const struct iovec *iov, int iovcnt,
                off_t offset);

ssize_t preadv2(int fd, const struct iovec *iov, int iovcnt,
                off_t offset, int flags);

ssize_t pwritev2(int fd, const struct iovec *iov, int iovcnt,
                 off_t offset, int flags);

glibc ๊ธฐ๋Šฅ ํ™•์ธ ๋งคํฌ๋กœ ์š”๊ฑด (feature_test_macros(7) ์ฐธ๊ณ ):

preadv(), pwritev():
glibc 2.19๋ถ€ํ„ฐ:
_DEFAULT_SOURCE
glibc 2.19 ๋ฐ ์ด์ „:
_BSD_SOURCE

DESCRIPTION

readv() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ fd์— ์—ฐ๊ณ„๋œ ํŒŒ์ผ์—์„œ iov๊ฐ€ ๊ธฐ์ˆ ํ•˜๋Š” ๋ฒ„ํผ๋“ค๋กœ iovcnt ๊ฐœ ๋ฒ„ํผ๋ฅผ ์ฝ์–ด ๋“ค์ธ๋‹ค ("์Šค์บํ„ฐ ์ž…๋ ฅ").

writev() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ iov๊ฐ€ ๊ธฐ์ˆ ํ•˜๋Š” iovcnt ๊ฐœ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๋ฅผ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ fd์— ์—ฐ๊ณ„๋œ ํŒŒ์ผ๋กœ ๊ธฐ๋กํ•œ๋‹ค ("๊ฐœ๋” ์ถœ๋ ฅ").

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

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

readv() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ์—ฌ๋Ÿฌ ๋ฒ„ํผ๋ฅผ ์ฑ„์šด๋‹ค๋Š” ์ ์„ ๋นผ๋ฉด read(2)์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋™์ž‘ํ•œ๋‹ค.

writev() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ์—ฌ๋Ÿฌ ๋ฒ„ํผ๋ฅผ ์จ๋„ฃ๋Š”๋‹ค๋Š” ์ ์„ ๋นผ๋ฉด write(2)์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋™์ž‘ํ•œ๋‹ค.

๋ฒ„ํผ๋“ค์€ ๋ฐฐ์—ด ๋‚ด ์ˆœ์„œ์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋œ๋‹ค. ์ฆ‰ readv()์—์„œ iov[0]๋ฅผ ์™„์ „ํžˆ ์ฑ„์šด ๋‹ค์Œ iov[1]๋กœ ์ง„ํ–‰ํ•˜๋Š” ์‹์ด๋‹ค. (๋ฐ์ดํ„ฐ๊ฐ€ ์ถฉ๋ถ„ํžˆ ์—†์œผ๋ฉด iov๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฒ„ํผ๋“ค์ด ๋ชจ๋‘ ์ฑ„์›Œ์ง€์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.) ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ writev()์—์„œ๋Š” iov[0]์˜ ๋‚ด์šฉ ์ „์ฒด๋ฅผ ์จ๋„ฃ์€ ๋‹ค์Œ iov[1]๋กœ ์ง„ํ–‰ํ•˜๋Š” ์‹์ด๋‹ค.

readv()์™€ writev()๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ด๋™์€ ์›์ž์ ์ด๋‹ค. ์ฆ‰ writev()๊ฐ€ ์จ๋„ฃ๋Š” ๋ฐ์ดํ„ฐ๋Š” ํ•œ ๋ฉ์–ด๋ฆฌ๋กœ ๊ธฐ๋ก๋˜๋ฉฐ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์“ฐ๊ธฐ ์ถœ๋ ฅ๊ณผ ์„ž์ด์ง€ ์•Š๋Š”๋‹ค. (ํ•˜์ง€๋งŒ pipe(7)์˜ ์˜ˆ์™ธ ์ฐธ๊ณ .) ์œ ์‚ฌํ•˜๊ฒŒ readv()๋Š” ๊ฐ™์€ ์—ด๋ฆฐ ํŒŒ์ผ ๊ธฐ์ˆ  ํ•ญ๋ชฉ(open(2) ์ฐธ๊ณ )์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ๊ฐ€์ง„ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ ๋‚ด์ง€ ํ”„๋กœ์„ธ์Šค์—์„œ์˜ ์ฝ๊ธฐ ๋™์ž‘๊ณผ ์ƒ๊ด€์—†์ด ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์—ฐ์†์ธ ๋ฉ์–ด๋ฆฌ๋ฅผ ์ฝ๋Š”๋‹ค๊ณ  ๋ณด์žฅ๋œ๋‹ค.

preadv()์™€ pwritev()

preadv() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ readv()์™€ pread(2)์˜ ๊ธฐ๋Šฅ์„ ํ•ฉ์นœ ๊ฒƒ์ด๋‹ค. readv()์™€ ๊ฐ™์€ ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋˜ ๋„ค ๋ฒˆ์งธ ์ธ์ž offset์ด ์ถ”๊ฐ€๋ผ์„œ ์ž…๋ ฅ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ํŒŒ์ผ ์˜คํ”„์…‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

pwritev() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ writev()์™€ pwrite(2)์˜ ๊ธฐ๋Šฅ์„ ํ•ฉ์นœ ๊ฒƒ์ด๋‹ค. writev()์™€ ๊ฐ™์€ ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋˜ ๋„ค ๋ฒˆ์งธ ์ธ์ž offset์ด ์ถ”๊ฐ€๋ผ์„œ ์ถœ๋ ฅ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ํŒŒ์ผ ์˜คํ”„์…‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ๋“ค์€ ํŒŒ์ผ ์˜คํ”„์…‹์„ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค. fd๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŒŒ์ผ์—์„œ seek์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.

preadv2()์™€ pwritev2()

์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ๋“ค์€ preadv() ๋ฐ pwritev() ํ˜ธ์ถœ๊ณผ ๋น„์Šทํ•˜๋˜ ๋‹ค์„ฏ ๋ฒˆ์งธ ์ธ์ž flags๊ฐ€ ์ถ”๊ฐ€๋ผ์„œ ํ˜ธ์ถœ๋ณ„๋กœ ๋™์ž‘ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

preadv() ๋ฐ pwritev()์™€ ๋‹ฌ๋ฆฌ offset ์ธ์ž๊ฐ€ -1์ด๋ฉด ํ˜„์žฌ ํŒŒ์ผ ์˜คํ”„์…‹์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐฑ์‹ ํ•œ๋‹ค.

flags ์ธ์ž๋Š” ๋‹ค์Œ ํ”Œ๋ž˜๊ทธ๋ฅผ 0๊ฐœ ์ด์ƒ ๋น„ํŠธ OR ํ•œ ๊ฐ’์„ ๋‹ด๋Š”๋‹ค.

RWF_DSYNC (๋ฆฌ๋ˆ…์Šค 4.7๋ถ€ํ„ฐ)
์“ฐ๊ธฐ๋ณ„๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” open(2) O_DSYNC ํ”Œ๋ž˜๊ทธ์˜ ๋“ฑ๊ฐ€๋ฌผ. ์ด ํ”Œ๋ž˜๊ทธ๋Š” pwritev2()์—๋งŒ ์œ ํšจํ•˜๋ฉฐ ์‹œ์Šคํ…œ ํ˜ธ์ถœ๋กœ ๊ธฐ๋กํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ฒ”์œ„์—๋งŒ ์ ์šฉ๋œ๋‹ค.
RWF_HIPRI (๋ฆฌ๋ˆ…์Šค 4.6๋ถ€ํ„ฐ)
์šฐ์„ ๋„ ๋†’์€ ์ฝ๊ธฐ/์“ฐ๊ธฐ. ๋ธ”๋ก ๊ธฐ๋ฐ˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ์žฅ์น˜ ํด๋ง์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ์šฉํ•œ๋‹ค. ์ง€์—ฐ์ด ๋‚ฎ์•„์ง€์ง€๋งŒ ์ž์›์„ ๋” ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค. (ํ˜„์žฌ ์ด ๊ธฐ๋Šฅ์€ O_DIRECT ํ”Œ๋ž˜๊ทธ๋กœ ์—ฐ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.)
RWF_SYNC (๋ฆฌ๋ˆ…์Šค 4.7๋ถ€ํ„ฐ)
์“ฐ๊ธฐ๋ณ„๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” open(2) O_SYNC ํ”Œ๋ž˜๊ทธ์˜ ๋“ฑ๊ฐ€๋ฌผ. ์ด ํ”Œ๋ž˜๊ทธ๋Š” pwritev2()์—๋งŒ ์œ ํšจํ•˜๋ฉฐ ์‹œ์Šคํ…œ ํ˜ธ์ถœ๋กœ ๊ธฐ๋กํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ฒ”์œ„์—๋งŒ ์ ์šฉ๋œ๋‹ค.
RWF_NOWAIT (๋ฆฌ๋ˆ…์Šค 4.14๋ถ€ํ„ฐ)
์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜๋ฉด ๊ธฐ๋ฐ˜ ์ €์žฅ์†Œ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์™€์•ผ ํ•˜๊ฑฐ๋‚˜ ๋ฝ์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— preadv2() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์ฆ‰์‹œ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค. ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ฝ์—ˆ์œผ๋ฉด ์ฝ์€ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฝ์€ ๋ฐ”์ดํŠธ๊ฐ€ ์—†์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  errno๋ฅผ EAGAIN์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. ํ˜„์žฌ ์ด ํ”Œ๋ž˜๊ทธ๋Š” preadv2()์—๋งŒ ์œ ํšจํ•˜๋‹ค.
RWF_APPEND (๋ฆฌ๋ˆ…์Šค 4.16๋ถ€ํ„ฐ)
์“ฐ๊ธฐ๋ณ„๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” open(2) O_APPEND ํ”Œ๋ž˜๊ทธ์˜ ๋“ฑ๊ฐ€๋ฌผ. ์ด ํ”Œ๋ž˜๊ทธ๋Š” pwritev2()์—๋งŒ ์œ ํšจํ•˜๋ฉฐ ์‹œ์Šคํ…œ ํ˜ธ์ถœ๋กœ ๊ธฐ๋กํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ฒ”์œ„์—๋งŒ ์ ์šฉ๋œ๋‹ค. offset ์ธ์ž๊ฐ€ ์“ฐ๊ธฐ ๋™์ž‘์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉฐ ํ•ญ์ƒ ํŒŒ์ผ ๋์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ง๋ถ™์ธ๋‹ค. ๋‹ค๋งŒ offset ์ธ์ž๊ฐ€ -1์ด๋ฉด ํ˜„์žฌ ํŒŒ์ผ ์˜คํ”„์…‹์„ ๊ฐฑ์‹ ํ•œ๋‹ค.

RETURN VALUE

์„ฑ๊ณต ์‹œ readv(), preadv(), preadv2()๋Š” ์ฝ์–ด ๋“ค์ธ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. writev(), pwritev(), pwritev2()๋Š” ๊ธฐ๋กํ•œ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์„ฑ๊ณตํ•œ ํ˜ธ์ถœ์—์„œ ์š”์ฒญ๋ณด๋‹ค ์ ์€ ๋ฐ”์ดํŠธ๋ฅผ ์ด๋™ํ•œ ๊ฒƒ์ด ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ ์— ์œ ์˜ํ•˜๋ผ. (read(2) ๋ฐ write(2) ์ฐธ๊ณ .)

์˜ค๋ฅ˜ ์‹œ -1์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ errno๋ฅผ ์ ์ ˆํžˆ ์„ค์ •ํ•œ๋‹ค.

ERRORS

์˜ค๋ฅ˜๋Š” read(2) ๋ฐ write(2)์—์„œ์™€ ๊ฐ™๋‹ค. ๋”๋ถˆ์–ด preadv(), preadv2(), pwritev(), pwritev2()๊ฐ€ lseek(2)๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์‹คํŒจํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ถ”๊ฐ€๋กœ ๋‹ค์Œ ์˜ค๋ฅ˜๋“ค์ด ์ •์˜๋ผ ์žˆ๋‹ค.

EINVAL
iov_len ๊ฐ’๋“ค์˜ ํ•ฉ์ด ssize_t ๊ฐ’์„ ๋„˜์น˜๊ฒŒ ํ•œ๋‹ค.
EINVAL
๋ฒกํ„ฐ ์นด์šดํŠธ iovcnt๊ฐ€ 0๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ํ—ˆ์šฉ ์ตœ๋Œ€์น˜๋ณด๋‹ค ํฌ๋‹ค.
EOPNOTSUPP
flags์— ์•Œ ์ˆ˜ ์—†๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ–ˆ๋‹ค.

VERSIONS

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

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

CONFORMING TO

readv(), writev(): POSIX.1-2001, POSIX.1-2008, 4.4BSD (4.2BSD์—์„œ ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ๋“ค์ด ์ฒ˜์Œ ๋“ฑ์žฅ).

preadv(), pwritev(): ๋น„ํ‘œ์ค€, ํ•˜์ง€๋งŒ ์ตœ์‹  BSD๋“ค์—๋„ ์žˆ์Œ.

preadv2(), pwritev2(): ๋น„ํ‘œ์ค€ ๋ฆฌ๋ˆ…์Šค ํ™•์žฅ.

NOTES

POSIX.1์—์„œ๋Š” iov์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•ญ๋ชฉ ๊ฐœ์ˆ˜์— ๋Œ€ํ•œ ์ œํ•œ์„ ๊ตฌํ˜„์—์„œ ๋‘˜ ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ์šฉํ•œ๋‹ค. ๊ตฌํ˜„์—์„œ <limits.h>์— IOV_MAX๋ฅผ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๋Ÿฐํƒ€์ž„์— sysconf(_SC_IOV_MAX) ๋ฐ˜ํ™˜ ๊ฐ’์„ ํ†ตํ•ด ๊ทธ ์ œํ•œ๊ฐ’์„ ์„ ์ „ํ•  ์ˆ˜ ์žˆ๋‹ค. ์š”์ฆ˜ ๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ์—์„œ๋Š” ๊ทธ ์ œํ•œ์ด 1024์ด๋‹ค. ๋ฆฌ๋ˆ…์Šค 2.0 ์‹œ์ ˆ์—๋Š” ๊ทธ ์ œํ•œ์ด 16์ด์—ˆ๋‹ค.

C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ/์ปค๋„ ์ฐจ์ด

์ง„์งœ preadv() ๋ฐ pwritev() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์˜ ํ˜ธ์ถœ ์‹œ๊ทธ๋„ˆ์ฒ˜๋Š” SYNOPSIS์— ์žˆ๋Š” ๋Œ€์‘ํ•˜๋Š” GNU C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ž˜ํผ ํ•จ์ˆ˜์™€ ์‚ด์ง ๋‹ค๋ฅด๋‹ค. ๋ž˜ํผ ํ•จ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ์ธ์ž offset์„ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์—์„œ๋Š” ๋‘ ๊ฐœ ์ธ์ž๋กœ ๋‚˜๋ˆˆ๋‹ค.

unsigned long pos_l, unsigned long pos

์ด ์ธ์ž๋“ค์€ ๊ฐ๊ฐ offset์˜ ํ•˜์œ„ 32๋น„ํŠธ์™€ ์ƒ์œ„ 32๋น„ํŠธ๋ฅผ ๋‹ด๋Š”๋‹ค.

๊ณผ๊ฑฐ์˜ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ/์ปค๋„ ์ฐจ์ด

๋ฆฌ๋ˆ…์Šค ์ดˆ๊ธฐ ๋ฒ„์ „์—์„œ IOV_MAX๊ฐ€ ์•„์ฃผ ๋‚ฎ์•˜๋˜ ๊ฒƒ์— ๋Œ€์ฒ˜ํ•˜๊ธฐ ์œ„ํ•ด glibc์˜ readv() ๋ฐ writev() ๋ž˜ํผ ํ•จ์ˆ˜์—์„œ๋Š” ๊ธฐ๋ฐ˜ ์ปค๋„ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ๊ทธ ์ œํ•œ ์ดˆ๊ณผ ๋•Œ๋ฌธ์— ์‹คํŒจํ–ˆ์Œ์„ ๊ฐ์ง€ํ•œ ๊ฒฝ์šฐ ์–ด๋–ค ์ถ”๊ฐ€ ์ž‘์—…์„ ํ•ด ์ฃผ์—ˆ๋‹ค. readv()์˜ ๊ฒฝ์šฐ ๋ž˜ํผ ํ•จ์ˆ˜์—์„œ iov์˜ ํ•ญ๋ชฉ๋“ค์„ ๋ชจ๋‘ ๋‹ด์„ ๋งŒํผ ํฐ ์ž„์‹œ ๋ฒ„ํผ๋ฅผ ํ• ๋‹นํ•ด์„œ ๊ทธ ๋ฒ„ํผ๋กœ read(2) ํ˜ธ์ถœ์„ ํ•œ ๋‹ค์Œ ๋ฒ„ํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ iov ํ•ญ๋ชฉ๋“ค์˜ iov_base ํ•„๋“œ์— ์ง€์ •๋œ ์œ„์น˜๋กœ ๋ณต์‚ฌํ•˜๊ณ ์„œ ๋ฒ„ํผ๋ฅผ ํ•ด์ œํ–ˆ๋‹ค. writev()์˜ ๋ž˜ํผ ํ•จ์ˆ˜๋„ ์ž„์‹œ ๋ฒ„ํผ์™€ write(2) ํ˜ธ์ถœ๋กœ ๋น„์Šทํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค 2.2 ๋ฐ ์ดํ›„๋ถ€ํ„ฐ๋Š” glibc ๋ž˜ํผ ํ•จ์ˆ˜์—์„œ ์ด๋Ÿฐ ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š” ์—†๊ฒŒ ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ glibc๋Š” ๋ฒ„์ „ 2.10๊นŒ์ง€ ์ด ๋™์ž‘์„ ๊ณ„์† ์ œ๊ณตํ–ˆ๋‹ค. glibc ๋ฒ„์ „ 2.9๋ถ€ํ„ฐ๋Š” ์‹œ์Šคํ…œ์ด ๋ฆฌ๋ˆ…์Šค ์ปค๋„ 2.6.18(์ž„์˜๋กœ ์„ ์ •ํ•œ ์ปค๋„ ๋ฒ„์ „)๋ณด๋‹ค ์˜ค๋ž˜ ๋œ ๋ฒ„์ „์—์„œ ๋™์ž‘ ์ค‘์ž„์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ํƒ์ง€ํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋ž˜ํผ ํ•จ์ˆ˜๊ฐ€ ์ด ๋™์ž‘์„ ์ œ๊ณตํ•œ๋‹ค. (์ตœ์†Œ๋กœ ์š”๊ตฌํ•˜๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๋ฒ„์ „์ด 2.6.32์ธ) glibc 2.20๋ถ€ํ„ฐ๋Š” ์–ธ์ œ๋‚˜ glibc ๋ž˜ํผ ํ•จ์ˆ˜์—์„œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ๋ฐ”๋กœ ๋ถ€๋ฅธ๋‹ค.

EXAMPLE

๋‹ค์Œ ์ฝ”๋“œ ์ƒ˜ํ”Œ์ด writev() ์‚ฌ์šฉ ๋ฐฉ์‹์„ ๋ณด์—ฌ ์ค€๋‹ค.

char *str0 = "hello ";
char *str1 = "world\n";
struct iovec iov[2];
ssize_t nwritten;

iov[0].iov_base = str0;
iov[0].iov_len = strlen(str0);
iov[1].iov_base = str1;
iov[1].iov_len = strlen(str1);

nwritten = writev(STDOUT_FILENO, iov, 2);

SEE ALSO

pread(2), read(2), write(2)


2018-04-30

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