dup2(2)


synopsis

       #include <unistd.h>

       int dup(int oldfd);
       int dup2(int oldfd, int newfd);

       #define _GNU_SOURCE             /* See feature_test_macros(7) */
       #include <fcntl.h>              /* Definition of O_* constants */
       #include <unistd.h>

       int dup3(int oldfd, int newfd, int flags);

gptbox summary

dup() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ oldfd ๋””์Šคํฌ๋ฆฝํ„ฐ์™€ ๋™์ผํ•œ ์—ด๋ฆฐ ํŒŒ์ผ ์„ค๋ช…์ž๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ƒˆ๋กœ์šด ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ๋ฒˆํ˜ธ๋Š” ํ˜ธ์ถœ ํ”„๋กœ์„ธ์Šค์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋ฒˆํ˜ธ์˜ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์ž„์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์ธ ๋ฐ˜ํ™˜ ํ›„์—๋Š” ์ด์ „ ๋ฐ ์ƒˆ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ์„œ๋กœ ๊ตํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋Š” ๋™์ผํ•œ ์—ด๋ฆฐ ํŒŒ์ผ ์„ค๋ช…์ž๋ฅผ ์ฐธ์กฐํ•˜๋ฏ€๋กœ ํŒŒ์ผ ์˜คํ”„์…‹๊ณผ ํŒŒ์ผ ์ƒํƒœ ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋Š” ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ํ”Œ๋ž˜๊ทธ(FD_CLOEXEC)๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š์œผ๋ฉฐ dup()๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๋ณต์ œ ๋””์Šคํฌ๋ฆฝํ„ฐ์˜ close-on-exec ํ”Œ๋ž˜๊ทธ๋Š” ๊บผ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

dup2() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ dup()์™€ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋ฒˆํ˜ธ์˜ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ๋Œ€์‹  newfd๋กœ ์ง€์ •๋œ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ newfd๋Š” ์ด์ œ oldfd์™€ ๋™์ผํ•œ ์—ด๋ฆฐ ํŒŒ์ผ ์„ค๋ช…์ž๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์กฐ์ •๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ newfd๊ฐ€ ์ด์ „์— ์—ด๋ ค ์žˆ์—ˆ๋‹ค๋ฉด ์žฌ์‚ฌ์šฉ๋˜๊ธฐ ์ „์— ๋‹ซํž™๋‹ˆ๋‹ค. ๋‹ซ๊ธฐ๋Š” ๋ฌด์†Œ์Œ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋ฉฐ(์ฆ‰, dup2()์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋ณด๊ณ ๋˜์ง€ ์•Š์Œ), ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ newfd๋ฅผ ๋‹ซ๊ณ  ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋‹จ๊ณ„๋Š” ์›์ž์ ์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

dup3()์€ dup2()์™€ ๋™์ผํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค: