attributes(7) - wariua/manpages-ko GitHub Wiki

NAME

attributes - POSIX ์•ˆ์ „์„ฑ ๊ฐœ๋…

DESCRIPTION

์ฐธ๊ณ : ์ด ๋งจ ํŽ˜์ด์ง€๋Š” GNU C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งค๋‰ด์–ผ์˜ "POSIX Safety Concepts" ์ ˆ์—์„œ ๊ฐ€์ ธ์˜จ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์„ค๋ช…ํ•˜๋Š” ์ฃผ์ œ๋“ค์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์„ ๊ทธ ๋งค๋‰ด์–ผ์—์„œ ์ฐพ์•„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋งŽ์€ ํ•จ์ˆ˜ ๋งค๋‰ด์–ผ ํŽ˜์ด์ง€์—๋Š” ATTRIBUTES ์ ˆ์ด ์žˆ์–ด์„œ ์—ฌ๋Ÿฌ ๋ฌธ๋งฅ์—์„œ ๊ทธ ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ์•ˆ์ „์„ฑ์„ ๊ธฐ์ˆ ํ•œ๋‹ค. ๊ทธ ์ ˆ์—์„œ๋Š” ํ•จ์ˆ˜์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์•ˆ์ „์„ฑ ํ‘œ์‹œ๋ฅผ ๋ถ™์ธ๋‹ค.

MT-Safe

MT-Safe, ์ฆ‰ ์Šค๋ ˆ๋“œ ์•ˆ์ „ ํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•  ๋•Œ์—๋„ ์•ˆ์ „ํ•˜๊ฒŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. MT-Safe์—์„œ MT๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ(Multi Thread)๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

MT-Safe๋ผ๊ณ  ํ•ด์„œ ํ•จ์ˆ˜๊ฐ€ ์›์ž์ ์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ POSIX์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‚ด๋ณด์ด๋Š” ์–ด๋–ค ๋ฉ”๋ชจ๋ฆฌ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ๋„ ์•„๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ MT-Safe ํ•จ์ˆ˜๋“ค์„ ์ฐจ๋ก€๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด MT-Safe์ธ ์กฐํ•ฉ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•œ ์Šค๋ ˆ๋“œ์—์„œ MT-Safe ํ•จ์ˆ˜ ๋‘ ๊ฐœ๋ฅผ ์ž‡๋‹ฌ์•„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ๋‘ ํ•จ์ˆ˜ ์กฐํ•ฉ์„ ์›์ž์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™๋“ฑํ•œ ๋™์ž‘์„ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋ฐ, ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ๋™์‹œ์— ์ด๋ค„์ง€๋Š” ํ˜ธ์ถœ๋“ค์ด ํŒŒ๊ดด์ ์œผ๋กœ ๊ฐ„์„ญํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„˜์–ด์„œ ํ•จ์ˆ˜๋ฅผ ์ธ๋ผ์ธ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด ์ตœ์ ํ™”๋กœ ์ธํ•ด ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ˆœ์„œ ๋ฐ”๋€œ์ด ๋“œ๋Ÿฌ๋‚  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ž˜์„œ GNU C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„˜์–ด์„œ ์ธ๋ผ์ด๋‹์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฑธ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด ์ตœ์ ํ™” ํ•˜์—์„œ๋Š” ๊ธฐ๋ก๋ผ ์žˆ๋Š” MT ์•ˆ์ „์„ฑ์ด ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ํ—ค๋”์— ์ •์˜๋ผ ์žˆ๋Š” ํ•จ์ˆ˜๋“ค์€ ์ธ๋ผ์ธ ํ•˜๊ธฐ์— ์•ˆ์ „ํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ฒƒ์ด๋‹ค.

MT-Unsafe
MT-Unsafe ํ•จ์ˆ˜๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ˜ธ์ถœํ•˜๊ธฐ์— ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.

์•ˆ์ „์„ฑ ํ‘œ์‹œ์— ๋“ฑ์žฅํ•˜๋Š” ๋‹ค๋ฅธ ํ‚ค์›Œ๋“œ๋“ค์„ ์ด์–ด์ง€๋Š” ์ ˆ์—์„œ ์ •์˜ํ•œ๋‹ค.

์กฐ๊ฑด๋ถ€๋กœ ์•ˆ์ „ํ•œ ๊ธฐ๋Šฅ

ํŠน์ • ๋ฌธ๋งฅ์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์•ˆ์ „ํ•˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“œ๋Š” ์ผ๋ถ€ ํŠน์„ฑ๋“ค์— ๋Œ€ํ•ด์„  ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ž์ฒด๋ฅผ ์‚ผ๊ฐ€๋Š” ๊ฒƒ ๋ง๊ณ ๋„ ์•ˆ์ „์„ฑ ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๋ ค์ง„ ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ๋‹ค. ์ด์–ด์ง€๋Š” ํ‚ค์›Œ๋“œ๋“ค์ด ๊ทธ๋Ÿฐ ํŠน์„ฑ์„ ํ‘œ์‹œํ•˜๋Š”๋ฐ, ๊ฐ ์ •์˜์—๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ์•ˆ์ „์„ฑ ๋ฌธ์ œ๋ฅผ ์—†์• ๊ธฐ ์œ„ํ•ด ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ์— ์–ด๋–ค ์ œ์•ฝ์„ ๊ฐ€ํ•ด์•ผ ํ•˜๋Š”์ง€๊ฐ€ ๋‚˜์™€ ์žˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ ์•ˆ์ „ํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ์ด์œ ๋“ค์„ ๋ชจ๋‘ ํ™•์ธํ•ด์„œ ์ ํ˜€ ์žˆ๋Š” ์ œ์•ฝ์„ ์ ์šฉํ•ด ํ•ด๊ฒฐํ•  ๋•Œ์—๋งŒ ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ค ๋ฌธ๋งฅ์—์„œ ํ˜ธ์ถœํ•˜๊ธฐ์— ์•ˆ์ „ํ•ด์ง„๋‹ค.

init

MT-Unsafe ํŠน์„ฑ์œผ๋กœ init ํ‘œ์‹œ๊ฐ€ ๋œ ํ•จ์ˆ˜๋“ค์€ ์ฒซ ํ˜ธ์ถœ ๋•Œ MT-Unsafe์ธ ์ดˆ๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๊ทธ๋Ÿฐ ํ•จ์ˆ˜๋ฅผ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋ชจ๋“œ์—์„œ ์ ์–ด๋„ ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜๋ฉด ๊ทธ ํ•จ์ˆ˜๊ฐ€ MT-Unsafe์ด๊ฒŒ ํ•˜๋Š” ๊ทธ ํŠน์ • ์›์ธ์ด ์—†์–ด์ง„๋‹ค. ๊ทธ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์ด์œ ๊ฐ€ ๋‚จ์•„ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ ์‹œ์ž‘ ํ›„์— ๊ทธ ํ•จ์ˆ˜๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

race
MT ์•ˆ์ „์„ฑ๊ณผ ๊ด€๋ จํ•ด race ํ‘œ์‹œ๊ฐ€ ๋œ ํ•จ์ˆ˜๋“ค์€ ๋™์‹œ ์‹คํ–‰์œผ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ๊ฒฝ์Ÿ์ด๋‚˜ ์œ ์‚ฌํ•œ ํ˜•ํƒœ์˜ ํŒŒ๊ดด์  ๊ฐ„์„ญ์„ ์œ ๋ฐœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด๋“ค์— ๋™์ž‘ํ•œ๋‹ค. ์ผ๋ถ€ ๊ฒฝ์šฐ์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ํ•จ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๊ณ , ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋˜ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—์„œ๋Š” ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „ํ˜€ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๋Š”๋‹ค.
const

MT ์•ˆ์ „์„ฑ๊ณผ ๊ด€๋ จํ•ด const ํ‘œ์‹œ๊ฐ€ ๋œ ํ•จ์ˆ˜๋“ค์€ GNU C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ƒ๋‹น ๋ถ€๋ถ„์—์„œ ๋™๊ธฐํ™” ์—†์ด ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์ˆ˜๋กœ ์—ฌ๊ธฐ๋Š” ๊ฒŒ ๋‚˜์€ ๋‚ด๋ถ€ ๊ฐ์ฒด๋ฅผ ์›์ž์ ์ด์ง€ ์•Š๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค. ๋‚ด๋ถ€ ๊ฐ์ฒด๋ฅผ ์ฝ๋Š” ์ชฝ๊ณผ ์“ฐ๋Š” ์ชฝ ๋ชจ๋‘๋ฅผ MT-Unsafe์ด๊ฒŒ ํ•˜๋Š” race์™€ ๋‹ฌ๋ฆฌ ์ด ํ‘œ์‹œ๋Š” ์“ฐ๋Š” ์ชฝ์—๋งŒ ์ ์šฉ๋œ๋‹ค. ์“ฐ๋Š” ์ชฝ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฑด ์—ฌ์ „ํžˆ MT-Unsafe์ด์ง€๋งŒ ๊ฐ์ฒด ๋ณ€๊ฒฝ ํ›„์— ๊ฐ์ฒด์˜ ์ƒ์ˆ˜์„ฑ์ด ๋‹ค์‹œ ๋Œ์•„์˜ค๋ฏ€๋กœ ์ฝ๋Š” ์ชฝ์„ (์•ˆ์ „ํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๋‹ค๋ฅธ ์ด์œ ๊ฐ€ ๋‚จ์•„ ์žˆ์ง€ ์•Š๋‹ค๋ฉด) MT-Safe๋กœ ์—ฌ๊ธธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๊ฐ์ฒด๊ฐ€ ์‹ค์งˆ์ ์œผ๋กœ ์ƒ์ˆ˜์ผ ๋•Œ ๋™๊ธฐํ™”๊ฐ€ ์—†๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.

const ํ‘œ์‹œ ๋’ค์— ์‹๋ณ„์ž๊ฐ€ ์˜ค๋Š”๋ฐ ์ฝ๋Š” ์ชฝ์—๋Š” ๊ทธ ์‹๋ณ„์ž๋งŒ ์•ˆ์ „์„ฑ ํ‘œ์‹œ๋กœ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. ์“ฐ๋Š” ์ชฝ์„ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ด ์•ˆ์ „์„ฑ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ณ  ์‹ถ์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์‹๋ณ„์ž์— ์—ฐ๊ณ„๋œ ๋น„์žฌ๊ท€ ์ฝ๊ธฐ-์“ฐ๊ธฐ ๋ฝ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹๋ณ„์ž ๋ถ™์€ const๋กœ ํ‘œ์‹œ๋œ ํ•จ์ˆ˜๋“ค์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ๋ชจ๋‘ ์“ฐ๊ธฐ ๋ฝ์œผ๋กœ ๋ณดํ˜ธํ•˜๊ณ  ์‹๋ณ„์ž๋งŒ ํ‘œ์‹œ๋œ ํ•จ์ˆ˜๋“ค์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ๋ชจ๋‘ ์ฝ๊ธฐ ๋ฝ์œผ๋กœ ๋ณดํ˜ธํ•˜๋ฉด ๋œ๋‹ค.

sig

MT ์•ˆ์ „์„ฑ๊ณผ ๊ด€๋ จํ•ด sig ํ‘œ์‹œ๊ฐ€ ๋œ ํ•จ์ˆ˜๋“ค์—์„œ๋Š” ๋‚ด๋ถ€์ ์ธ ์šฉ๋„๋กœ ์ž„์‹œ๋กœ ์‹œ๊ทธ๋„ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ž˜์„œ ์ฝœ๋ก  ๋’ค์— ํ‘œ์‹œ๋œ ์‹œ๊ทธ๋„์„ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ„์„ญ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

ํ˜ธ์ถœ ๋™์•ˆ์— ๊ทธ ์‹œ๊ทธ๋„์„ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์“ฐ์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ์ด ์•ˆ์ „์„ฑ ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ™์€ ์ž„์‹œ ์‹œ๊ทธ๋„์„ ์“ฐ๋Š” ๋ชจ๋“  ํ•จ์ˆ˜๋“ค์˜ ํ˜ธ์ถœ ๋™์•ˆ ๋น„์žฌ๊ท€ ๋ฎคํ…์Šค๋ฅผ ์žก๊ณ , ํ˜ธ์ถœ ์ „์— ๊ทธ ์‹œ๊ทธ๋„์„ ๋ง‰์•˜๋‹ค๊ฐ€ ์ดํ›„์— ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์žฌ์„ค์ •ํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•œ๋‹ค.

term

MT ์•ˆ์ „์„ฑ๊ณผ ๊ด€๋ จํ•ด term ํ‘œ์‹œ๊ฐ€ ๋œ ํ•จ์ˆ˜๋“ค์—์„œ๋Š” ํ‘œ์ค€ ๋ฐฉ์‹์— ๋”ฐ๋ผ ํ„ฐ๋ฏธ๋„ ์„ค์ •์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ tcgetattr(3)์„ ํ˜ธ์ถœํ•˜๊ณ  ์–ด๋–ค ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ณ€๊ฒฝํ•œ ๋‹ค์Œ tcsetattr(3)์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ๋Ÿฌ๋ฉด ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ์˜ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์œ ์‹ค๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์ด ์ƒ๊ธด๋‹ค. ๋”ฐ๋ผ์„œ term์œผ๋กœ ํ‘œ์‹œ๋œ ํ•จ์ˆ˜๋“ค์€ MT-Unsafe์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ„ฐ๋ฏธ๋„์„ ์“ฐ๋Š” ์‘์šฉ์—์„œ๋Š” ๋™์‹œ์ ์ด๊ณ  ์žฌ์ง„์ž… ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ„ฐ๋ฏธ๋„๊ณผ ์ƒํ˜ธ์ž‘์šฉ ํ•˜๋Š” ๊ฑธ ํ”ผํ•˜๋Š” ๊ฒŒ ๋ฐ”๋žŒ์งํ•˜๋‹ค. ์‹œ๊ทธ๋„ ํ•ธ๋“ค๋Ÿฌ์—์„œ ๊ทธ ํ•จ์ˆ˜๋“ค์„ ์“ฐ์ง€ ์•Š๊ฑฐ๋‚˜ ์“ธ ์ˆ˜๋„ ์žˆ์„ ์‹œ๊ทธ๋„์„ ๋ง‰๊ณ , ๊ทธ ํ•จ์ˆ˜๋“ค์„ ํ˜ธ์ถœํ•˜๋Š” ๋™์•ˆ๊ณผ ํ„ฐ๋ฏธ๋„๊ณผ ์ƒํ˜ธ์ž‘์šฉ ํ•˜๋Š” ๋™์•ˆ์— ๋ฝ์„ ์žก๊ณ  ์žˆ์œผ๋ฉด ๋œ๋‹ค. ๊ทธ ๋ฝ์„ race:tcattr(fd) ํ‘œ์‹œ๊ฐ€ ๋œ ํ•จ์ˆ˜์™€์˜ ์ƒํ˜ธ ๋ฐฐ์ œ์—๋„ ์“ฐ๋Š” ๊ฒŒ ์ข‹์€๋ฐ, ์—ฌ๊ธฐ์„œ fd๋Š” ํ„ฐ๋ฏธ๋„ ์ œ์–ด๋ฅผ ์œ„ํ•œ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์ด๋‹ค. ๋‹จ์ˆœํ•จ์„ ์œ„ํ•ด ํ˜ธ์ถœ์ž๊ฐ€ ๋ฎคํ…์Šค ํ•œ ๊ฐœ๋ฅผ ์“ธ ์ˆ˜๋„ ์žˆ๊ณ  (์—ฌ๋Ÿฌ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๊ฐ€ ์ฐธ์กฐํ•˜๋”๋ผ๋„) ํ„ฐ๋ฏธ๋„๋ณ„๋กœ ๋ฎคํ…์Šค ํ•œ ๊ฐœ์”ฉ์„ ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค.

๊ธฐํƒ€ ์•ˆ์ „์„ฑ ํ‘œ์‹œ

ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์•ˆ์ „ํ•˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฑด ์•„๋‹ˆ์ง€๋งŒ ํŠน์ • ํ”„๋กœ๊ทธ๋žจ ์œ ํ˜•์—์„œ ๊ณ ๋ ค๊ฐ€ ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๋Š” ํŠน์„ฑ๋“ค์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ํ•จ์ˆ˜์— ์ถ”๊ฐ€๋กœ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.

locale

MT ์•ˆ์ „์„ฑ๊ณผ ๊ด€๋ จํ•ด locale ํ‘œ์‹œ๊ฐ€ ๋œ ํ•จ์ˆ˜๋“ค์€ ์–ด๋–ค ํ˜•ํƒœ์˜ ๋™๊ธฐํ™”๋„ ์—†์ด ๋กœ์บ˜ ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋‹ค. ๋กœ์บ˜ ๋ณ€๊ฒฝ๊ณผ ๋™์‹œ์— locale ํ‘œ์‹œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์‹คํ–‰ ์ค‘ ํ™œ์„ฑ์ธ ๋กœ์บ˜ ์–ด๋А ๊ฒƒ์—๋„ ํ•ด๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๊ทธ๊ฒŒ ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ์„ž์ธ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ํ•จ์ˆ˜๋“ค์„ MT-Unsafe๋ผ๊ณ  ํ‘œ์‹œํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๋กœ์บ˜ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜๋“ค์— const:locale ํ‘œ์‹œ๋ฅผ ํ•˜๊ณ  ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ์—ฌ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ทธ ํ•จ์ˆ˜๋“ค์€ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋Œ๊ฑฐ๋‚˜ ๋น„๋™๊ธฐ ์‹œ๊ทธ๋„์ด ํ™œ์„ฑํ™”๋ผ ์žˆ์„ ๋•Œ ํ˜ธ์ถœ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๊ณ , ๋”ฐ๋ผ์„œ ๊ทธ ๋งฅ๋ฝ์—์„œ๋Š” ๋กœ์บ˜์ด ์‹ค์งˆ์ ์œผ๋กœ ์ƒ์ˆ˜๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ž˜์„œ ์ด ํ•จ์ˆ˜๋“ค์ด ์•ˆ์ „ํ•ด์ง„๋‹ค.

env

MT ์•ˆ์ „์„ฑ๊ณผ ๊ด€๋ จํ•ด env ํ‘œ์‹œ๊ฐ€ ๋œ ํ•จ์ˆ˜๋“ค์€ ๋™์‹œ ๋ณ€๊ฒฝ ์‹œ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์–ด๋–ค ์•ˆ์ „ ์žฅ์น˜๋„ ์—†์ด getenv(3) ๋‚ด์ง€ ์œ ์‚ฌ ํ•จ์ˆ˜๋กœ ํ™˜๊ฒฝ์— ์ ‘๊ทผํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ํ•จ์ˆ˜๋“ค์„ MT-Unsafe๋ผ๊ณ  ํ‘œ์‹œํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ํ™˜๊ฒฝ์„ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜๋“ค์— ๋ชจ๋‘ const:env ํ‘œ์‹œ๋ฅผ ํ•˜๊ณ  ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ์—ฌ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ทธ ํ•จ์ˆ˜๋“ค์€ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋Œ๊ฑฐ๋‚˜ ๋น„๋™๊ธฐ ์‹œ๊ทธ๋„์ด ํ™œ์„ฑํ™”๋ผ ์žˆ์„ ๋•Œ ํ˜ธ์ถœ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๊ณ , ๋”ฐ๋ผ์„œ ๊ทธ ๋งฅ๋ฝ์—์„œ๋Š” ํ™˜๊ฒฝ์ด ์‹ค์งˆ์ ์œผ๋กœ ์ƒ์ˆ˜๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ž˜์„œ ์ด ํ•จ์ˆ˜๋“ค์ด ์•ˆ์ „ํ•ด์ง„๋‹ค.

hostid
MT ์•ˆ์ „์„ฑ๊ณผ ๊ด€๋ จํ•ด hostid ํ‘œ์‹œ๊ฐ€ ๋œ ํ•จ์ˆ˜๋“ค์€ ๋จธ์‹ ์˜ "ํ˜ธ์ŠคํŠธ ID"๋ฅผ ๋‹ด์€ ์‹œ์Šคํ…œ ์ „์—ญ ์ž๋ฃŒ ๊ตฌ์กฐ๋“ค์„ ์ฝ๋Š”๋‹ค. ์ด ์ž๋ฃŒ ๊ตฌ์กฐ๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์›์ž์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. ๋ณดํ†ต์€ "ํ˜ธ์ŠคํŠธ ID"๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š์„ ๊ฒƒ์ด๋ฏ€๋กœ ๊ทธ๊ฑธ ์ฝ๋Š” ํ•จ์ˆ˜(gethostid(3))๋Š” ์•ˆ์ „ํ•œ ๊ฒƒ์œผ๋กœ ์—ฌ๊ธฐ๊ณ  ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜(sethostid(3))์— const:hostid ํ‘œ์‹œ๋ฅผ ํ•ด์„œ ํ˜ธ์ถœ ์‹œ ํŠน๋ณ„ํ•œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ํ‘œ์‹œํ•œ๋‹ค. ๊ทธ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์—์„œ ํŠน๋ณ„ํ•œ ์ฃผ์˜๋Š” (ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€ ์ •๋„๊ฐ€ ์•„๋‹ˆ๋ผ) ์‹œ์Šคํ…œ ์ „์ฒด์—์„œ์˜ ์กฐ์œจ์„ ๋œปํ•œ๋‹ค.
sigintr

MT ์•ˆ์ „์„ฑ๊ณผ ๊ด€๋ จํ•ด sigintr ํ‘œ์‹œ๊ฐ€ ๋œ ํ•จ์ˆ˜๋“ค์€ ๋™์‹œ ๋ณ€๊ฒฝ ์‹œ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์–ด๋–ค ์•ˆ์ „ ์žฅ์น˜๋„ ์—†์ด GNU C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ _sigintr๋ผ๋Š” ๋‚ด๋ถ€ ์ž๋ฃŒ ๊ตฌ์กฐ์— ์ ‘๊ทผํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ํ•จ์ˆ˜๋“ค์„ MT-Unsafe๋ผ๊ณ  ํ‘œ์‹œํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๊ทธ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜๋“ค์— ๋ชจ๋‘ const:sigintr ํ‘œ์‹œ๋ฅผ ํ•˜๊ณ  ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ์—ฌ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ทธ ํ•จ์ˆ˜๋“ค์€ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋Œ๊ฑฐ๋‚˜ ๋น„๋™๊ธฐ ์‹œ๊ทธ๋„์ด ํ™œ์„ฑํ™”๋ผ ์žˆ์„ ๋•Œ ํ˜ธ์ถœ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๊ณ , ๋”ฐ๋ผ์„œ ๊ทธ ๋งฅ๋ฝ์—์„œ๋Š” ๊ทธ ์ž๋ฃŒ ๊ตฌ์กฐ๊ฐ€ ์‹ค์งˆ์ ์œผ๋กœ ์ƒ์ˆ˜๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ž˜์„œ ์ด ํ•จ์ˆ˜๋“ค์ด ์•ˆ์ „ํ•ด์ง„๋‹ค.

cwd

MT ์•ˆ์ „์„ฑ๊ณผ ๊ด€๋ จํ•ด cwd ํ‘œ์‹œ๊ฐ€ ๋œ ํ•จ์ˆ˜๋“ค์€ ์‹คํ–‰ ์ค‘์— ์ผ์‹œ์ ์œผ๋กœ ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋‚˜ ๋น„๋™๊ธฐ ์‹œ๊ทธ๋„ ํ•ธ๋“ค๋Ÿฌ ๋‚ด์ง€ ์ทจ์†Œ ํ•ธ๋“ค๋Ÿฌ์—์„œ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ช…์ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•ด์„๋  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฐ ํ•จ์ˆ˜๋“ค์— MT-Unsafe ํ‘œ์‹œ๋ฅผ ๋ถ™์ผ ํ•„์š”๊นŒ์ง€๋Š” ์—†๊ฒ ์ง€๋งŒ, ์ด ๋™์ž‘ ๋ฐฉ์‹์ด ์„ ํƒ์ ์ผ ๋•Œ๋Š” (๊ฐ€๋ น nftw(3)๋ฅผ FTW_CHDIR๋กœ ์‚ฌ์šฉ) ๊ทธ ์„ ํƒ์ง€๋ฅผ ํ”ผํ•˜๋Š” ๊ฒŒ ์ „์ฒด ๊ฒฝ๋กœ๋ช…์ด๋‚˜ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ๊ธฐ์ค€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ(๊ฐ€๋ น openat(2))์„ ์“ฐ๋Š” ๊ฒƒ๋ณด๋‹ค ์ข‹์€ ๋Œ€์•ˆ์ผ ์ˆ˜ ์žˆ๋‹ค.

:์‹๋ณ„์ž

๋•Œ๋กœ๋Š” ํ‘œ์‹œ ๋’ค์— ์‹๋ณ„์ž๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด race์™€ const์—์„œ์ฒ˜๋Ÿผ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ฐฉ์‹์œผ๋กœ ์ž๋ฃŒ ๊ตฌ์กฐ์— ์ ‘๊ทผํ•˜๋Š” ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋“ค์„ ํ•œ๋ฐ ๋ฌถ๊ฑฐ๋‚˜ sig๋กœ ํ‘œ์‹œํ•œ ํ•จ์ˆ˜์—์„œ ์‹œ๊ทธ๋„ ์ด๋ฆ„์„ ์ ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ตฌ์ฒด์ ์ธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค. ํ–ฅํ›„์—๋Š” lock๊ณผ corrupt์—๋„ ์ ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฆฌ๋ผ ์ƒ๊ฐํ•œ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—์„œ ์‹๋ณ„์ž๋Š” ํ•จ์ˆ˜๊ตฐ์˜ ์ด๋ฆ„์ด ๋˜๊ฒ ์ง€๋งŒ ์ „์—ญ ๊ฐ์ฒด๋‚˜ ํ•จ์ˆ˜ ์ธ์ž, ๋˜๋Š” ๊ทธ์— ์—ฐ๊ณ„๋œ ์‹๋ณ„ ๊ฐ€๋Šฅ ์†์„ฑ์ด๋‚˜ ๋…ผ๋ฆฌ์  ์š”์†Œ์˜ ์ด๋ฆ„์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด :buf(arg) ํ‘œ๊ธฐ๋Š” ์ธ์ž arg์— ์—ฐ๊ณ„๋œ ๋ฒ„ํผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ :tcattr(fd)๋Š” ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ fd์˜ ํ„ฐ๋ฏธ๋„ ์†์„ฑ๋“ค์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ํ”ํ•œ ๊ฒฝ์šฐ๋Š” ํ•ด๋‹น ๋ฌธ๋งฅ์—์„œ ์•ˆ์ „ํ•œ ๋™์ž‘์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ™์€ ๋™๊ธฐํ™” ์š”์†Œ๋กœ ๋ณดํ˜ธํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜์™€ ์ธ์ž๋“ค์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฌถ๋Š” ๊ฒƒ์ด๋‹ค.

/์กฐ๊ฑด

์–ด๋–ค ์•ˆ์ „์„ฑ ํ‘œ์‹œ๋Š” ์กฐ๊ฑด๋ถ€์ด๋‹ค. ์ฆ‰ ์ธ์ž๋‚˜ ์ „์—ญ ๋ณ€์ˆ˜, ์‹ฌ์ง€์–ด ๊ธฐ๋ฐ˜ ์ปค๋„๊นŒ์ง€ ํฌํ•จ๋˜๋Š” ์–ด๋–ค ๋ถˆ๋ฆฌ์–ธ ์‹์ด ์ฐธ์œผ๋กœ ํ‰๊ฐ€๋  ๋•Œ๋งŒ ์ ์šฉ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด /!ps์™€ /one_per_line์€ ์ธ์ž ps๊ฐ€ NULL์ผ ๋•Œ์—๋งŒ, ๊ทธ๋ฆฌ๊ณ  ์ „์—ญ ๋ณ€์ˆ˜ one_per_line์ด 0์ด ์•„๋‹ ๋•Œ์—๋งŒ ์•ž์˜ ํ‘œ์‹œ๊ฐ€ ์ ์šฉ๋จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ์•ˆ์ „ํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๋ชจ๋“  ํ‘œ์‹œ๋“ค์— ๊ทธ๋Ÿฐ ์กฐ๊ฑด์ด ๋ถ™์–ด ์žˆ์œผ๋ฉฐ ๊ทธ ์กฐ๊ฑด๋“ค ์ค‘ ์–ด๋А ๊ฒƒ๋„ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์„ ๋•Œ์—๋Š” ๊ทธ ํ•จ์ˆ˜๋ฅผ ์•ˆ์ „ํ•œ ๊ฒƒ์œผ๋กœ ์—ฌ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

SEE ALSO

pthreads(7)


2015-03-02

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