pipex - KimTaebin-ai/study_posts GitHub Wiki

ํ•„์š” ๊ฐœ๋… ๋ฐ ํ•™์Šต ๋‚ด์šฉ

ํ”„๋กœ๊ทธ๋žจ

์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๊ทธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•๊ณผ ์ˆœ์„œ๋ฅผ ๊ธฐ์ˆ ํ•˜์—ฌ ์ปดํ“จํ„ฐ์— ์ฃผ์–ด์ง€๋Š” ์ผ๋ จ์˜ ๋ช…๋ น๋ฌธ ์ง‘ํ•ฉ์ฒด๋ฅผ ๋œปํ•œ๋‹ค. ์กฐ๊ธˆ ๋” ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด, ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์— ๋”ฐ๋ผ ๊ทธ ์ž…๋ ฅ๋œ ๊ฐ’์„ ์ผ์ •ํ•œ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•๊ณผ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•ด๋‚ด๋Š” ๋ช…๋ น๋ฌธ ์ง‘ํ•ฉ์ด๋‹ค.

์ถœ์ฒ˜ ๋‚˜๋ฌด์œ„ํ‚ค

ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋Š” ๊ฒƒ์€ ์ฝ”๋”ฉ์œผ๋กœ ์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ๋“ค์˜ ๋ฌถ์Œ์ธ ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ณ , ์ด๋Š” ๊ทธ๋ƒฅ ๋ช…๋ น์–ด๋“ค์˜ ๋ชจ์Œ์ผ ๋ฟ์ด์ง€ ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด๋Š” ๋ฌด์–ธ๊ฐ€ ์ผ์„ ํ•˜๊ฑฐ๋‚˜ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. (์ •์ ์ด๋‹ค)

์ด ํ”„๋กœ๊ทธ๋žจ์„ ๋™์ž‘์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„  ์ปดํ“จํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ์œ„์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค

ํ”„๋กœ์„ธ์Šค

์ปดํ“จํ„ฐ์—์„œ ์—ฐ์†์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

์ถœ์ฒ˜ ์œ„ํ‚ค ๋ฐฑ๊ณผ

์œ„์—์„œ ์„ค๋ช…ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜์–ด cpu ์ž์›์„ ํ• ๋‹น๋ฐ›์•„ ์—ฐ์†์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋™์ ์ธ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

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

๋”ฐ๋ผ์„œ ํ”„๋กœ์„ธ์Šค๋Š” ์›๋ž˜ ๋…๋ฆฝ์ ์ด์ง€๋งŒ, ์ƒํ™ฉ์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค๋ผ๋ฆฌ ํ˜‘๋ ฅํ•ด์•ผ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค๊ฐ„ ์ž์›๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ, ์„œ๋กœ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•ด ๋ณ„๋„์˜ ๋งค์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•˜๊ณ  IPC ๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

IPC

Inter Process Communication ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ 

ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์— ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ํ–‰์œ„ ๋˜๋Š” ๊ทธ์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์ด๋‚˜ ๊ฒฝ๋กœ๋ฅผ ๋œปํ•œ๋‹ค.

์ถœ์ฒ˜ ์œ„ํ‚ค ๋ฐฑ๊ณผ

์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฉฐ, ๋™์‹œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ณต์œ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๋”ฐ๋ผ์„œ ํ”„๋กœ์„ธ์Šค๋Š” ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์‹ ์„ ์œ„ํ•œ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์ฆ‰, ๋ณ„๋„์˜ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.

๋ณ„๋„์˜ ๊ณต๊ฐ„ : ํŒŒ์ผ / ์‹ ํ˜ธ / ์†Œ์ผ“ / ๋ฉ”์‹œ์ง€ ํ / ํŒŒ์ดํ”„ / ์ง€๋ช… ํŒŒ์ดํ”„ / ์„ธ๋งˆํฌ์–ด / ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ / ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ / ๋ฉ”๋ชจ๋ฆฌ ๋งต ํŒŒ์ผ

"์ด ์ค‘ ํŒŒ์ดํ”„์— ๋Œ€ํ•ด์„œ ๊ตฌํ˜„ํ•˜๋ผ" ๊ฐ€ ํ•ด๋‹น ๊ณผ์ œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด๋‹ค. ์•„์‹œ๊ฒ ๋ƒ

ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ

๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜ ์šด์˜์ฒด์ œ๋Š” 'ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ' ๋ผ๋Š” ๊ฒƒ์œผ๋กœ ๋ฆฌ๋ˆ…์Šค์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•œ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์•„๋ฌด๋Ÿฐ ์ƒ๊ฐ ์—†์ด ์‚ฌ์šฉํ•˜๋˜ ๋ช…๋ น์–ด๋“ค์€ ์ „๋ถ€ ํŒŒ์ผ ํ˜•ํƒœ์˜€๋‹ค ์•„์‹œ๊ฒ ๋ƒ

๋”ฐ๋ผ์„œ ์‹ค์ œ๋กœ ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜ ์šด์˜์ฒด์ œ์˜ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ๋“ค์€ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜๊ฒŒ ๋˜๊ณ , ์ด๋Ÿฌํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ€์žฅ ๋จผ์ € ํŒŒ์ผ์„ ์—ด์–ด์•ผํ•œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์˜ ํŒŒ์ผ์„ ์—ด๋ฉด ์ปค๋„์ด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ž‘์„ ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์žฅ์น˜๋‚˜ ํŒŒ์ผ๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์—ฌ์„œ ๊ด€๋ฆฌ ํ•˜๊ฒŒ ๋˜๊ณ , ์ด๋Ÿฌํ•œ ๋ฒˆํ˜ธ๋ฅผ ํŒŒ์ผ๋””์Šคํฌ๋ฆฝํ„ฐ(file descriptor ์ดํ•˜ fd)๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ fd๊ฐ’์€ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ๋‹ค.

ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ํ…Œ์ด๋ธ”

์ด๋Ÿฌํ•œ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ํ…Œ์ด๋ธ”์—๋Š” ์ž์ฃผ ์“ฐ์ด๋Š” 3๊ฐœ์˜ ์žฅ์น˜๊ฐ€ ๋ฏธ๋ฆฌ ์ €์žฅ(ํ˜น์€ ์˜ˆ์•ฝ) ๋˜์–ด์žˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋˜ fd ๋ฒˆํ˜ธ 0, 1, 2 (ํ‘œ์ค€ ์ž…๋ ฅ, ํ‘œ์ค€ ์ถœ๋ ฅ, ํ‘œ์ฃฝ ์—๋Ÿฌ) ์ด๋‹ค. ๋จธ๋ฆฌ๊ฐ€ ๋ตํ•˜๋‹ค ์•„์‹œ๊ฒ ๋ƒ

๋”ฐ๋ผ์„œ ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด, ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ํ…Œ์ด๋ธ”์ด ์ƒ๊ธฐ๊ฒŒ ๋˜๊ณ , 3๊ฐœ์˜ ์ŠคํŠธ๋ฆผ์ด ์ž๋™์œผ๋กœ ์—ด๋ฆฐ๋‹ค.

์ดํ›„ ํŠน์ • ํŒŒ์ผ์„ ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋ฉด, ์ปค๋„์—์„œ๋Š” ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์–‘์ˆ˜๊ฐ’์˜ fd ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌ ํ•˜๊ณ , ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํŒŒ์ผ์˜ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ํ…Œ์ด๋ธ”์˜ ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๊ฒŒ ๋ฐ”๋กœ ํŒŒ์ผ ํ…Œ์ด๋ธ” ์ด๋‹ค

๊ทธ ์ดํ›„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ด๋ ค์žˆ๋Š” ํŒŒ์ผ์— ์‹œ์Šคํ…œ ์ฝœ ์„ ์ด์šฉํ•ด์„œ ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋ฉด, ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ๊ฐ’์„ ์ด์šฉํ•ด์„œ ํŒŒ์ผ์„ ์ง€์นญํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ•ญ๋ชฉ์€ fd ํ”Œ๋ž˜๊ทธ์™€ ํŒŒ์ผ ํ…Œ์ด๋ธ”๋กœ์˜ ํฌ์ธํ„ฐ ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ fd ๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์˜ ํŒŒ์ผ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค๋Š” ์ด๋Ÿฐ fd ํ…Œ์ด๋ธ”๊ณผ ํŒŒ์ผ ํ…Œ์ด๋ธ”์„ ์ง์ ‘ ๊ณ ์น  ์ˆ˜ ์—†๋‹ค.

๋”ฐ๋ผ์„œ ๋ฐ˜๋“œ์‹œ ์ปค๋„์„ ํ†ตํ•ด์„œ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.


fd ์˜ˆ์ œ ์งง๊ฒŒ

image

cmd > file_name

cmd์—์„œ ์ถœ๋ ฅ๋˜๋Š” ๋‚ด์šฉ์„ file_name ์— ๋ฎ์–ด์“ฐ๊ธฐ

๋‹ค๋งŒ ์•„๋ž˜์˜ ๊ฒฝ์šฐ์—๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

image

(๋ฆฌ๋””๋ ‰์…˜) ์—ฐ์‚ฐ์ž๋Š” ํ‘œ์ค€ ์ถœ๋ ฅ์˜ ๋‚ด์šฉ์„ ์ง€์ •ํ•œ ํŒŒ์ผ์— ์ €์žฅํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ํ•ด๋‹น ๋ช…๋ น์–ด๋Š” ์˜ค๋ฅ˜์ด๋ฏ€๋กœ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ฆ‰, ํ‘œ์ค€ ์—๋Ÿฌ๋กœ ์ถœ๋ ฅ๋˜๊ณ  ์žˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ํ‘œ์ค€ ์ถœ๋ ฅ๊ณผ ํ‘œ์ค€ ์—๋Ÿฌ๋Š” ๋ณ„๋„๋กœ ์ฒ˜๋ฆฌ ๋˜๋ฏ€๋กœ test2.txt์— ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค

์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ test2.txt์— ์ €์žฅํ•˜๋ ค๋ฉด image

fd ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋ฉด ์ €์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

ํŒŒ์ดํ”„ (|)

cmd1์˜ ํ‘œ์ค€ ์ถœ๋ ฅ ์„ cmd2์˜ ํ‘œ์ค€ ์ž…๋ ฅ ์œผ๋กœ ๋ฐ›๋Š”๋‹ค.

  • ํŒŒ์ดํ”„์— ์—ฐ๊ฒฐ๋œ ๋‘ ํ”„๋กœ์„ธ์Šค๋Š” ๋™์‹œ์— ์‹คํ–‰๋œ๋‹ค.

  • ์™ผ์ชฝ ๋ช…๋ น์–ด๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ์ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ฆ‰์‹œ ์˜ค๋ฅธ์ชฝ ๋ช…๋ น์–ด๋กœ ์ „๋‹ฌ๋œ๋‹ค.

  • ์™ผ์ชฝ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋ฒ„ํผ์— ์ €์žฅ๋˜๊ณ , ์˜ค๋ฅธ์ชฝ ํ”„๋กœ์„ธ์Šค๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ์—์„œ ์ฝ๋Š”๋‹ค

์‹œ์Šคํ…œ ํ˜ธ์ถœ (System call)

์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ์šด์˜ ์ฒด์ œ์˜ ์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ์ปค๋„์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

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


ํ—ˆ์šฉ ํ•จ์ˆ˜

access

  • ํ—ค๋”: unistd.h

  • ๋งค๊ฐœ๋ณ€์ˆ˜ :

    • const char *pathname : ์ฒดํฌํ•˜๊ณ ์ž ํ•  ๋””๋ ‰ํ† ๋ฆฌ ๋˜๋Š” ํŒŒ์ผ๋ช…
    • int mode : ๋งˆ์Šคํฌ ๊ฐ’์„ ํ†ตํ•ด ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€ ๋ฐ ๊ถŒํ•œ ์—ฌ๋ถ€ ํ™•์ธ
      • R_OK : ํŒŒ์ผ ์กด์žฌ์—ฌ๋ถ€, ์ฝ๊ธฐ ๊ถŒํ•œ ์—ฌ๋ถ€
      • W_OK: ํŒŒ์ผ ์กด์žฌ์—ฌ๋ถ€, ์“ฐ๊ธฐ ๊ถŒํ•œ ์—ฌ๋ถ€
      • X_OK : ํŒŒ์ผ ์กด์žฌ์—ฌ๋ถ€, ์‹คํ–‰ ๊ถŒํ•œ์—ฌ๋ถ€
      • F_OK : ํŒŒ์ผ ์กด์žฌ์—ฌ๋ถ€
  • ๋ฐ˜ํ™˜๊ฐ’ : ์„ฑ๊ณต์‹œ 0, ์‹คํŒจ์‹œ -1

int main(void)
{
	char *path = "./test.txt";

	if (0 == access(path, F_OK))
	{
		write(1, "@\n", 2);
	}
	else
	{
		write(1, "$\n", 2);
	}
	return (0);
}

open

  • ํ—ค๋” : fcntl.h
  • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • const char *filename
    • int flags
      • O_RDONLY : ์ฝ๊ธฐ์ „์šฉ
      • O_WRONLY : ์“ฐ๊ธฐ์ „์šฉ
      • O_RDWR : ์ฝ๊ณ ์“ฐ๊ธฐ
  • ๋ฐ˜ํ™˜๊ฐ’ : ์„ฑ๊ณต ์‹œ ์–‘์˜ ์ •์ˆ˜์ธ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ, ์‹คํŒจ ์‹œ -1

unllink

  • ํ—ค๋” : unistd.h
  • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • const char *pathname
    • ๋ฐ˜ํ™˜๊ฐ’ : ์„ฑ๊ณต ์‹œ 0, ์‹คํŒจ ์‹œ -1
  • ์„ค๋ช…: ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜์—ฌ, ํŒŒ์ผ์— ๋Œ€ํ•œ ๋””๋ ‰ํ† ๋ฆฌ ํ•ญ๋ชฉ์„ ์ง€์šฐ๊ณ  ๋งํฌ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ์†Œ์‹œํ‚ด. ์ฆ‰, ํ•˜๋“œ๋งํฌ์˜ ์ด๋ฆ„์„ ์‚ญ์ œํ•˜๊ณ  ํ•˜๋“œ๋งํฌ ์นด์šดํŠธ๋ฅผ 1 ๊ฐ์†Œํ•œ๋‹ค.

image

close

  • ํ—ค๋” : unistd.h
  • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • int close
  • ๋ฐ˜ํ™˜๊ฐ’ : ์„ฑ๊ณต ์‹œ 0, ์‹คํŒจ ์‹œ -1
  • ์„ค๋ช…: openํ•จ์ˆ˜๋กœ ์—ฐ ํŒŒ์ผ์„ ์‚ฌ์šฉ์ค‘์ง€ํ•œ๋‹ค.

read

  • ํ—ค๋” : unistd.h
  • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • int fd : ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ
    • void *buf : ํŒŒ์ผ์„ ์ฝ์–ด๋“œ๋ฆด ๋ฒ„ํผ
    • size_t nbytes : ๋ฒ„ํผํฌ๊ธฐ
  • ๋ฐ˜ํ™˜๊ฐ’ : ์„ฑ๊ณต ์‹œ ์ฝ์€ ๋ฐ”์ดํŠธ ์ˆ˜, ์‹คํŒจ ์‹œ -1

fork

  • ํ—ค๋” : sys/wait.h
  • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • int *wstate : ์ข…๋ฃŒ์ƒํƒœ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ณ , NULL ์ „๋‹ฌ ๊ฐ€๋Šฅ
  • ๋ฐ˜ํ™˜๊ฐ’ : ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ํ”„๋กœ์„ธ์Šค์˜ PID, ์ž์‹ ํ”„๋กœ์„ธ์Šค์—๊ฒ 0 ๋ฐ˜ํ™˜

image

image

https://codetravel.tistory.com/23

wait

  • ํ—ค๋” : unistd.h
  • ๋งค๊ฐœ๋ณ€์ˆ˜ :
  • ๋ฐ˜ํ™˜๊ฐ’ : ์„ฑ๊ณต ์‹œ ์ข…๋ฃŒ๋œ ์ž์‹ ํ”„๋กœ์„ธ์Šค id, ์‹คํŒจ ์‹œ -1
  • ์„ค๋ช…: forkํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋˜๊ณ , ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จ. forkํ•จ์ˆ˜์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•˜์—ฌ ๊ฐ€์ง. forkํ•จ์ˆ˜ ์‹œ์ ๋ถ€ํ„ฐ, ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” forkํ•จ์ˆ˜์˜ ์•„๋ž˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค ๋ณด๋ฉด ๋จ. ๋ถ€๋ชจ์˜ ๋ฒ„ํผ๊นŒ์ง€ ๋ณต์‚ฌํ•จ

https://codingdog.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-wait-%ED%95%A8%EC%88%98-%EC%9E%90%EC%8B%9D-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EA%B0%80-%EC%A2%85%EB%A3%8C%EB%90%A0-%EB%95%8C-%EA%B9%8C%EC%A7%80-%EA%B8%B0%EB%8B%A4%EB%A6%B0%EB%8B%A4

https://reakwon.tistory.com/45

waitpid

  • ํ—ค๋” : sys/wait.h
  • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • pid_t pid : ๊ฐ์‹œํ•  ์ž์‹ ํ”„๋กœ์„ธ์Šค id
      • -1 : ์—ฌ๋Ÿฌ ์ž์‹ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ข…๋ฃŒ๋˜๋ฉด ๋ณต๊ท€
      • 0 : ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์˜ ๊ทธ๋ฃน ID์™€ ๊ฐ™์€ ๊ทธ๋ฃน์˜ ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ณต๊ท€
      • ์–‘์ˆ˜ : pid์— ํ•ด๋‹นํ•˜๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ณต๊ท€
    • int *status : ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฃŒ ์ƒํƒœ ์ •๋ณด
    • int options : ๋Œ€๊ธฐ๋ฅผ ์œ„ํ•œ ์˜ต์…˜
      • WNOHANG : ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ๋Š”์ง€ ์‹คํ–‰ ์ค‘์ธ์ง€๋งŒ ํ™•์ธํ•˜๊ณ  ๋ฐ”๋กœ ๋ณต๊ท€. ๋ถ€๋ชจํ”„๋กœ์„ธ์Šค๋Š” block๋˜์ง€ ์•Š์Œ
      • 0 : ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋ ๋•Œ๊นŒ์ง€ block๋จ.
  • ๋ฐ˜ํ™˜๊ฐ’ : ์„ฑ๊ณต ์‹œ ์ข…๋ฃŒ๋œ ์ž์‹ ํ”„๋กœ์„ธ์Šค id, ์‹คํŒจ ์‹œ -1
  • ์„ค๋ช…: ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ.

pipe

  • ํ—ค๋” : unistd.h
  • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • int fd[2] : fd๊ฐ€ 2๊ฐœ์ž„
  • ๋ฐ˜ํ™˜๊ฐ’ : ์„ฑ๊ณต์ ์œผ๋กœ ํ˜ธ์ถœ ์‹œ 0, ์‹คํŒจ ์‹œ -1
  • ์„ค๋ช…: ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์˜ ๋ฐฉ์‹. ํ•˜๋‚˜์˜ ํŒŒ์ดํ”„ ๋ฐ ํŒŒ์ดํ”„์— ๋Œ€ํ•œ ๋‘ ๊ฐœ์˜ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๊ฐ€ ์ƒ์„ฑ ํ•˜๋‚˜์˜ ํŒŒ์ดํ”„๋ฅผ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๊ณต์œ 

https://reakwon.tistory.com/80

https://nomad-programmer.tistory.com/110

dup

  • ํ—ค๋” : unistd.h
  • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • int fd : fd๋กœ ์ „๋‹ฌ๋ฐ›์€ ํŒŒ์ผ๋””์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณต์ œํ•˜์—ฌ ๋ฐ˜ํ™˜
  • ๋ฐ˜ํ™˜๊ฐ’ : ์„ฑ๊ณต ์‹œ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํŠธ ์ค‘ ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆซ์ž, ์‹คํŒจ ์‹œ -1

dup2

  • ํ—ค๋” : unistd.h
  • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • int fd : fd๋กœ ์ „๋‹ฌ๋ฐ›์€ ํŒŒ์ผ๋””์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณต์ œํ•˜์—ฌ ๋ฐ˜ํ™˜
    • int fd2 : ์ƒˆ ๋””์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ’์„ fd2๋กœ ์ง€์ •ํ•˜๊ณ , ๋งŒ์•ฝ fd2๊ฐ€ ์—ด๋ ค์žˆ๋‹ค๋ฉด, ๋‹ซ์€ ํ›„ ๋ณต์ œ๊ฐ€ ๋จ.
  • ๋ฐ˜ํ™˜๊ฐ’ : ์„ฑ๊ณต ์‹œ ์ƒˆ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํŠธ, ์‹คํŒจ ์‹œ -1

https://reakwon.tistory.com/104

execve

  • ํ—ค๋” : unistd.h
  • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • const char *path : ์ „์ฒด ํŒŒ์ผ ๋ช…
    • const char *arg : ์ธ์ˆ˜ ๋ชฉ๋ก
    • char * const envp[] : ํ™˜๊ฒฝ์„ค์ •๋ชฉ๋ก
  • ๋ฐ˜ํ™˜๊ฐ’ : ์‹คํŒจ ์‹œ -1
  • ์„ค๋ช…: ์ฒซ๋ฒˆ์งธ๋Š” ๋ช…๋ น์–ด๋ฅผ ๋„ฃ๋Š”๋‹ค. ๋‹ค๋งŒ ์•ž์— /bin/@@ํ˜•์‹์˜ path๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋‘๋ฒˆ์งธ๋Š” ์ธ์ž๋ฅผ ๋„ฃ๋Š”๋‹ค. main์—์„œ ๋„˜์–ด์˜จ ์ธ์ˆ˜ ๋ฐฐ์—ด์—์„œ ์•ž(์‹คํ–‰ํŒŒ์ผ)์—๋งŒ ๋นผ๊ณ  ๋„ฃ์œผ๋ฉด ๋ ๊ฑฐ๊ฐ™๋‹ค. ๋์— NULL ๋„ฃ๊ธฐ ์„ธ๋ฒˆ์งธ๋Š” main์—์„œ ๋ฐ›์•„์˜จ envp ๊ทธ๋Œ€๋กœ
#include <unistd.h>
#include <stdio.h>

int main(int argc, char * const *argv, char **envp)
{
	char *arr[] = {"ls", "-al", NULL};
	int returnv = execve("/bin/ls", arr, envp);
	printf("value = %d\n", returnv);
}

perror

  • ํ—ค๋” : stdio.h
  • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • const char *str : ์‹œ์Šคํ…œ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ๋‹ค์Œ์— ์ด์–ด ์ถœ๋ ฅํ•  ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”์„ธ์ง€
  • ๋ฐ˜ํ™˜๊ฐ’ :
  • ์„ค๋ช…: ์ „์—ญ๋ณ€์ˆ˜ errno์˜ ๊ฐ’์„ ํ•ด์„ํ•˜์—ฌ ์ด์— ํ•ด๋‹นํ•˜๋Š” ์˜ค๋ฅ˜๋ฉ”์„ธ์ง€๋ฅผ ํ‘œ์ค€ ์˜ค๋ฅ˜ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์— ์ถœ๋ ฅํ•จ

strerror

  • ํ—ค๋” : cstring.h
  • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • int errnum : ์˜ค๋ฅ˜๋ฒˆํ˜ธ, ์ด ๊ฐ’์„ ํ†ตํ•ด ๋ฐœ์ƒํ•˜์˜€๋–ค ์˜ค๋ฅ˜์— ์•Œ๋งž๋Š” ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๋ฆฌํ„ด์‹œํ‚ด
  • ๋ฐ˜ํ™˜๊ฐ’ : ์œ„ ์„ค๋ช…

exit

  • ํ—ค๋” : stdlib.h
  • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • int status : ์—๋Ÿฌ์ฝ”๋“œ
    • ๋ฐ˜ํ™˜๊ฐ’ :
  • ์„ค๋ช…: ํ˜„์žฌ์˜ cํ”„๋กœ๊ทธ๋žจ ์ž์ฒด๋ฅผ ์™„์ „ ์ข…๋ฃŒ, ๋ชจ๋“  ์—ด๋ ค์ง„ ํŒŒ์ผ ์ž๋™์œผ๋กœ ๋‹ซ์Œ, ์ถœ๋ ฅ๋ฒ„ํผ ์† ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋‘ ์“ฐ๊ธฐ ์™„๋ฃŒ, ์ •์ƒ ์ข…๋ฃŒ ์‹œ exit(0), ์—๋Ÿฌ์‹œ ๋Œ€์ฑ„๋กœ 1

๊ธฐ๋Šฅ ๊ตฌํ˜„

step 1

#include "pipex.h"

int	main(int argc, char *argv[])
{
	t_pipe pipe;

	if (argc != 5)
		err_message("arguments error"); // ์ธ์ž๊ฐ’ ์—๋Ÿฌ

	pipe.cmd1 = ft_split(argv[2], ' '); // ๋ช…๋ น์–ด 1 (2๋ฒˆ์งธ ์ธ์ž)
	pipe.cmd2 = ft_split(argv[2], ' '); // ๋ช…๋ น์–ด 2 (3๋ฒˆ์งธ ์ธ์ž)
	
	return (0);
}

main ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜ ์ฒดํฌ

step 2

pipe ์ƒ์„ฑ

step 3

fork

์ž์‹๊ณผ ๋ถ€๋ชจ ์ž˜ ์ƒ์„ฑ๋˜๊ณ  ์ž˜ ๋ฉˆ์ถ”๋Š”์ง€ ํ™•์ธ

step 4

if๋กœ ์—ญํ•  ๋ถ„๊ธฐ

step 5

pipe ํ‘œ์ค€ ์ž…์ธŒ๋ ฅ ์—ฐ๊ฒฐ

step 6

๋ฐ์ดํ„ฐ ์ „์†กํ™•์ธ

step 7

์—๋Ÿฌ์ฒดํฌ

  • ์“ฐ๊ธฐ๊ฐ€ ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ
  • ์ฝ๊ธฐ๊ฐ€ ๋˜์ง€์•Š์„ ๊ฒฝ์šฐ
  • ์–ด๋– ํ•œ ์ด์œ ๋กœ ์ž์‹์ด ์ฃฝ์„ ๊ฒฝ์šฐ
  • ์–ด๋– ํ•œ ์ด์œ ๋กœ ๋ถ€๋ชจ๊ฐ€ ์ฃฝ์„ ๊ฒฝ์šฐ
โš ๏ธ **GitHub.com Fallback** โš ๏ธ