๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
6. CS ๊ธฐ์ดˆ ๐Ÿ“š/Linux & Unix ๐Ÿง

[Linux/Unix][5-1] stat ๊ตฌ์กฐ์ฒด์˜ ๋ฉค๋ฒ„ // st_mode

by lxvxxu 2025. 10. 21.

stat ๊ตฌ์กฐ์ฒด์˜ ๋ฉค๋ฒ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

No. ๋ฉค๋ฒ„๋ช… ์„ค๋ช…
1 st_dev ์ด ํŒŒ์ผ์ด ์ €์žฅ๋œ ์žฅ์น˜์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ, ID์ด๋‹ค.
2 st_ino ๋ฆฌ๋ˆ…์Šค์—์„œ ๋ชจ๋“  ํŒŒ์ผ์€ “inode”๋ผ๋Š” ๊ณ ์œ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„๋‹ค. st_ino๊ฐ€ inode์— ํ•ด๋‹นํ•œ๋‹ค. ์ธ๊ฐ„์˜ ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ์™€ ๊ฐ™์ด ๊ฐ™์€ ํŒŒ์ผ์ด 2๊ฐœ ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
3 st_mode ํŒŒ์ผ์˜ ์ข…๋ฅ˜์™€ ์ฝ๊ธฐ, ์“ฐ๊ธฐ, ์‹คํ–‰ ๊ฐ€๋Šฅ ์—ฌ๋ถ€์™€ ๊ฐ™์€ ๊ถŒํ•œ์„ ๋น„ํŠธ ๋‹จ์œ„๋กœ ์ €์žฅํ•œ๋‹ค.
4 st_nlink ์ด ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•˜๋“œ ๋งํฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋œปํ•œ๋‹ค. ํ•˜๋“œ ๋งํฌ๋ž€ ์›๋ณธ ํŒŒ์ผ๊ณผ ๋™์ผํ•œ inode๋ฅผ ๊ฐ€์ง€๋Š” ๋งํฌ๋ฅผ ๋œปํ•œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด st_nlink๋Š” ํ•ด๋‹น inode๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋””๋ ‰ํ† ๋ฆฌ ํ•ญ๋ชฉ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
5 st_uid ์ด ํŒŒ์ผ์„ ์†Œ์œ ํ•œ ์‚ฌ์šฉ์ž ID๋ฅผ ๋œปํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ‘root’๋‚˜ ‘user’์™€ ๊ฐ™์€ ๊ณ„์ •์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ์ด๋‹ค.
6 st_gid ์†Œ์œ ์ž๊ฐ€ ์†ํ•œ ๊ทธ๋ฃน์˜ ID์ด๋‹ค.
7 st_rdev ๋งŒ์•ฝ ํŒŒ์ผ์ด ์žฅ์น˜ ๋“œ๋ผ์ด๋ฒ„์™€ ๊ฐ™์€ ํŠน์ˆ˜ ํŒŒ์ผ(๋ฌธ์ž/๋ธ”๋ก ๋””๋ฐ”์ด์Šค)์ผ ๋•Œ ์žฅ์น˜์˜ ๋ฒˆํ˜ธ์ด๋‹ค.
8 st_size ๋ฐ”์ดํŠธ ๋‹จ์œ„ ํŒŒ์ผ ํฌ๊ธฐ์ด๋‹ค. ๋ฌธ์„œ ํŒŒ์ผ์˜ ๊ฒฝ์šฐ ๋ช‡ ๊ธ€์ž์˜ ๋ฌธ์„œํŒŒ์ผ์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ๋™์˜์ƒ ํŒŒ์ผ์˜ ๊ฒฝ์šฐ ๋ช‡ MB์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
9 st_blksize ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์“ธ ๋•Œ(I/O) ๊ถŒ์žฅํ•˜๋Š” ๋ธ”๋ก ํฌ๊ธฐ์ด๋‹ค.
10 st_blocks ํŒŒ์ผ์ด ์‹ค์ œ๋กœ ๋””์Šคํฌ์—์„œ ์ฐจ์ง€ํ•˜๋Š” ๋ธ”๋ก ๋‹จ์œ„์˜ ๊ณต๊ฐ„์„ ๋œปํ•œ๋‹ค. 1๋ธ”๋ก์€ ๋ณดํ†ต 512๋ฐ”์ดํŠธ๋กœ ์ •ํ•ด์ ธ ์žˆ๋‹ค.
11 st_atime ์ด ํŒŒ์ผ์„ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฝ์€(access) ์‹œ๊ฐ„์„ ๋œปํ•œ๋‹ค.
12 st_mtime ๋งˆ์ง€๋ง‰์œผ๋กœ ์ด ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•œ(modify) ์‹œ๊ฐ„์„ ๋œปํ•œ๋‹ค.
13 st_ctime ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ถŒํ•œ, ์†Œ์œ ์ž ๋“ฑ์˜ ์†์„ฑ์ด ๋ณ€๊ฒฝ๋œ ์‹œ๊ฐ„์„ ๋œปํ•œ๋‹ค.

 

 

 

stat ๊ตฌ์กฐ์ฒด ์ค‘ st_mode ๋Š” ํŒŒ์ผ์˜ ์ข…๋ฅ˜, ํŒŒ์ผ์˜ ์ ‘๊ทผ ๊ถŒํ•œ ๋“ฑ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์‹œ์˜ค.(2)

 

st_mode๋Š” ํŒŒ์ผ์˜ ์ข…๋ฅ˜์™€ ์ ‘๊ทผ ๊ถŒํ•œ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ํ•„๋“œ์ด๋‹ค. ํŒŒ์ผ์˜ ์ข…๋ฅ˜๋Š” ์ผ๋ฐ˜ ํŒŒ์ผ, ๋””๋ ‰ํ† ๋ฆฌ, ์‹ฌ๋ณผ๋ฆญ ๋งํฌ, ํŠน์ˆ˜ ์žฅ์น˜ ํŒŒ์ผ ๋“ฑ์„ ๋œปํ•˜๋ฉฐ ์ ‘๊ทผ ๊ถŒํ•œ์€ ํŒŒ์ผ ์†Œ์œ ์ž(owner), ๊ทธ๋ฃน(group), ๊ทธ ๋ฐ–์˜ ์‚ฌ์šฉ์ž(other)๊ฐ€ ๊ฐ๊ฐ ์ฝ๊ณ (r) ์“ฐ๊ณ (w) ์‹คํ–‰(x)ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๊ฐ–๊ณ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋งํ•œ๋‹ค.

st_mode ๊ฐ’์—๋Š” ํŒŒ์ผ ์ข…๋ฅ˜์™€ ๊ถŒํ•œ์„ ๋น„ํŠธ๋กœ ํ•ฉ์ณ๋†“์€ ์ˆซ์ž๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

ํŒŒ์ผ ์ข…๋ฅ˜๋Š” <sys/stat.h>์—์„œ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ๋†“์€ ๋งคํฌ๋กœ์™€ AND(&) ์—ฐ์‚ฐ์œผ๋กœ ์ถ”์ถœํ•œ๋‹ค.

 

ํŒŒ์ผ ์ข…๋ฅ˜ ๋น„ํŠธ ๊ฐ’(์ง„์ˆ˜/8์ง„์ˆ˜) ๋งคํฌ๋กœ
์ผ๋ฐ˜ ํŒŒ์ผ 0x8000 (0100000) S_IFREG
๋””๋ ‰ํ† ๋ฆฌ 0x4000 (0040000) S_IFDIR
์‹ฌ๋ณผ๋ฆญ ๋งํฌ 0xA000 (0120000) S_IFLNK

 

์˜ˆ๋ฅผ ๋“ค์–ด ํŒŒ์ผ์ด ๋””๋ ‰ํ† ๋ฆฌ์ธ์ง€ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด

if ((st_mode & S_IFMT) == S_IFDIR) {}

์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํŒŒ์ผ ์ข…๋ฅ˜์— ํ•ด๋‹นํ•˜๋Š” ๋งคํฌ๋กœ๋ฅผ ์ด์šฉํ•ด ๊ตฌ๋ถ„ํ•œ๋‹ค.

 

ํŒŒ์ผ ์ ‘๊ทผ ๊ถŒํ•œ์€ ๊ฐ๊ฐ์˜ ๊ถŒํ•œ์ด ๋น„ํŠธ๊ฐ’์œผ๋กœ ํ‘œํ˜„๋˜๋ฉฐ ์ด ๋˜ํ•œ <sys/stat.h>์—์„œ ๋งคํฌ๋กœ๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค.

 

๊ถŒํ•œ ๋น„ํŠธ ๋งคํฌ๋กœ
์†Œ์œ ์ž ์ฝ๊ธฐ 0400 S_IRUSR
์†Œ์œ ์ž ์“ฐ๊ธฐ 0200 S_IWUSR
์†Œ์œ ์ž ์‹คํ–‰ 0100 S_IXUSR
๊ทธ๋ฃน ์ฝ๊ธฐ 0040 S_IRGRP
๊ทธ๋ฃน ์“ฐ๊ธฐ 0020 S_IWGRP
๊ทธ๋ฃน ์‹คํ–‰ 0010 S_IXGRP
๊ธฐํƒ€ ์ฝ๊ธฐ 0004 S_IROTH
๊ธฐํƒ€ ์“ฐ๊ธฐ 0002 S_IWOTH
๊ธฐํƒ€ ์‹คํ–‰ 0001 S_IXOTH

 

์˜ˆ๋ฅผ ๋“ค์–ด, ‘0644’๋ผ๋ฉด ์†Œ์œ ์ž(owner)๋งŒ ์ฝ๊ธฐ+์“ฐ๊ธฐ(o:rw-)๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ทธ๋ฃน(group)๊ณผ ๊ธฐํƒ€(other)๋Š” ์ฝ๊ธฐ๋งŒ(g: r--, o: r--) ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.

 

์ด๋Ÿฐ ๋น„ํŠธ ๊ฐ’๋“ค์„ ๋”ฐ๋กœ๋”ฐ๋กœ AND(&) ์—ฐ์‚ฐํ•ด์„œ ํ•ด๋‹น ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ์‰ฝ๊ฒŒ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํŒŒ์ผ์˜ ์ข…๋ฅ˜์™€ ํŒŒ์ผ ์ ‘๊ทผ ๊ถŒํ•œ์„ ํ™•์ธํ•˜๋Š” ์‹ค์ œ st_mode ์‚ฌ์šฉ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

st_mode๊ฐ€ 0100644๋ผ๊ณ  ํ•˜์ž. ๊ทธ๋ ‡๋‹ค๋ฉด ์•ž์˜ ‘010’์€ ์ผ๋ฐ˜ ํŒŒ์ผ์ž„์„ ๋œปํ•˜๋ฉฐ, ‘644’๋Š” ์œ„์—์„œ ์‚ดํŽด๋ณธ ์˜ˆ์‹œ์™€ ๊ฐ™์œผ๋ฉฐ rw-r—r—๋ฅผ ๋œปํ•œ๋‹ค.

์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

#include <sys/stat.h>
struct stat st;
stat("filename.txt", &st);
 
if (S_ISREG(st.st_mode)) { /* ์ผ๋ฐ˜ํŒŒ์ผ ์—ฌ๋ถ€ */ }
if (st.st_mode & S_IRUSR) { /* ์†Œ์œ ์ž ์ฝ๊ธฐ ๊ถŒํ•œ? */ }

 

 


โœ… ์ฃผ์š” ๋‚ด์šฉ ์š”์•ฝ

1. stat ๊ตฌ์กฐ์ฒด์˜ ๋ฉค๋ฒ„

stat ๊ตฌ์กฐ์ฒด๋Š” ํŒŒ์ผ์— ๊ด€ํ•œ ์—ฌ๋Ÿฌ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ๊ทธ ์ฃผ์š” ๋ฉค๋ฒ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

No๋ฉค๋ฒ„๋ช…์„ค๋ช…
1 st_dev ์ด ํŒŒ์ผ์ด ์ €์žฅ๋œ ์žฅ์น˜(device)์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ(ID)์ž…๋‹ˆ๋‹ค. lxvxxu
2 st_ino ๋ฆฌ๋ˆ…์Šค์—์„œ inode๋ผ ๋ถˆ๋ฆฌ๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๋กœ, ํŒŒ์ผ ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ ์ด ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. lxvxxu
3 st_mode ํŒŒ์ผ์˜ ์ข…๋ฅ˜(์ผ๋ฐ˜ํŒŒ์ผ, ๋””๋ ‰ํ„ฐ๋ฆฌ ๋“ฑ) ๋ฐ ๊ถŒํ•œ(์ฝ๊ธฐ/์“ฐ๊ธฐ/์‹คํ–‰) ์ •๋ณด๋ฅผ ๋น„ํŠธ(bit) ๋‹จ์œ„๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. lxvxxu
4 st_nlink ํ•ด๋‹น ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•˜๋“œ ๋งํฌ(hard link)์˜ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค. lxvxxu
5 st_uid ํŒŒ์ผ ์†Œ์œ ์ž(user)์˜ ์‚ฌ์šฉ์ž ID์ž…๋‹ˆ๋‹ค. lxvxxu
6 st_gid ํŒŒ์ผ ์†Œ์œ ์ž๊ฐ€ ์†ํ•œ ๊ทธ๋ฃน(group)์˜ ID์ž…๋‹ˆ๋‹ค. lxvxxu
7 st_rdev ๋งŒ์•ฝ ํŒŒ์ผ์ด ํŠน์ˆ˜ ํŒŒ์ผ(๋ฌธ์ž·๋ธ”๋ก ๋””๋ฐ”์ด์Šค)์ด๋ผ๋ฉด, ๊ทธ ์žฅ์น˜(device)์˜ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค. lxvxxu
8 st_size ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ๋ฐ”์ดํŠธ(Byte) ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. lxvxxu
9 st_blksize ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์“ธ ๋•Œ(I/O) ๊ถŒ์žฅ๋˜๋Š” ๋ธ”๋ก์˜ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค. lxvxxu
10 st_blocks ์‹ค์ œ๋กœ ๋””์Šคํฌ์—์„œ ํŒŒ์ผ์ด ์ฐจ์ง€ํ•œ ๋ธ”๋ก ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค (ํ†ต์ƒ 512 ๋ฐ”์ดํŠธ ๋‹จ์œ„). lxvxxu
11 st_atime ํŒŒ์ผ์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฝํžŒ(access) ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. lxvxxu
12 st_mtime ํŒŒ์ผ์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์ •(modify) ๋œ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. lxvxxu
13 st_ctime ํŒŒ์ผ์˜ ์†์„ฑ(change)(์˜ˆ: ๊ถŒํ•œ, ์†Œ์œ ์ž ๋“ฑ)์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. lxvxxu

2. st_mode์— ๋Œ€ํ•œ ์ƒ์„ธ ์„ค๋ช…

๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ„ ์ค‘ ํŠนํžˆ st_mode๊ฐ€ ํŒŒ์ผ ์ข…๋ฅ˜ + ์ ‘๊ทผ ๊ถŒํ•œ์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ๋น„ํŠธ๋กœ ์••์ถ•ํ•ด์„œ ๋‹ด๊ณ  ์žˆ์–ด์„œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. lxvxxu

โ–ธ ํŒŒ์ผ ์ข…๋ฅ˜

ํŒŒ์ผ์ด ์–ด๋–ค ํƒ€์ž…์ธ์ง€(e.g. ์ผ๋ฐ˜ ํŒŒ์ผ, ๋””๋ ‰ํ„ฐ๋ฆฌ, ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ๋“ฑ)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋น„ํŠธ๋“ค์ด ๋ฏธ๋ฆฌ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ, <sys/stat.h> ํ—ค๋”์—์„œ ๊ด€๋ จ ๋งคํฌ๋กœ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

  • ์ผ๋ฐ˜ ํŒŒ์ผ: S_IFREG (0x8000 ๋˜๋Š” 0100000 8์ง„์ˆ˜) lxvxxu
  • ๋””๋ ‰ํ„ฐ๋ฆฌ: S_IFDIR (0x4000 ๋˜๋Š” 0040000 8์ง„์ˆ˜) lxvxxu
  • ์‹ฌ๋ณผ๋ฆญ ๋งํฌ: S_IFLNK (0xA000 ๋˜๋Š” 0120000 8์ง„์ˆ˜) lxvxxu
 
if ((st.st_mode & S_IFMT) == S_IFDIR) {
    // ๋””๋ ‰ํ„ฐ๋ฆฌ์ผ ๊ฒฝ์šฐ
}

โ–ธ ์ ‘๊ทผ ๊ถŒํ•œ (๊ถŒํ•œ ๋น„ํŠธ)

์†Œ์œ ์ž(owner), ๊ทธ๋ฃน(group), ๊ธฐํƒ€(other)์— ๋Œ€ํ•œ ์ฝ๊ธฐ(r), ์“ฐ๊ธฐ(w), ์‹คํ–‰(x) ๊ถŒํ•œ์ด ๊ฐ๊ฐ ๋น„ํŠธ๋กœ ํ‘œํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. <sys/stat.h>์— ๋งคํฌ๋กœ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค: lxvxxu

  • ์†Œ์œ ์ž ์ฝ๊ธฐ: S_IRUSR (0400)
  • ์†Œ์œ ์ž ์“ฐ๊ธฐ: S_IWUSR (0200)
  • ์†Œ์œ ์ž ์‹คํ–‰: S_IXUSR (0100)
  • ๊ทธ๋ฃน ์ฝ๊ธฐ: S_IRGRP (0040)
  • ๊ทธ๋ฃน ์“ฐ๊ธฐ: S_IWGRP (0020)
  • ๊ทธ๋ฃน ์‹คํ–‰: S_IXGRP (0010)
  • ๊ธฐํƒ€ ์ฝ๊ธฐ: S_IROTH (0004)
  • ๊ธฐํƒ€ ์“ฐ๊ธฐ: S_IWOTH (0002)
  • ๊ธฐํƒ€ ์‹คํ–‰: S_IXOTH (0001)

์˜ˆ๋ฅผ ๋“ค์–ด ๊ถŒํ•œ์ด 0644๋ผ๋ฉด:

  • ์†Œ์œ ์ž: ์ฝ๊ธฐ + ์“ฐ๊ธฐ (rw-)
  • ๊ทธ๋ฃน: ์ฝ๊ธฐ๋งŒ (r-)
  • ๊ธฐํƒ€: ์ฝ๊ธฐ๋งŒ (r-)
    ๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. lxvxxu

โ–ธ ์ „์ฒด ๊ฐ’ ์˜ˆ์‹œ

์œ„ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ, ๋งŒ์•ฝ st_mode ๊ฐ’์ด 0100644๋ผ๋ฉด:

  • ์•ž๋ถ€๋ถ„ 010 → ์ผ๋ฐ˜ ํŒŒ์ผ์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋น„ํŠธ(ํŒŒ์ผ ์ข…๋ฅ˜)
  • ๋’ค๋ถ€๋ถ„ 644 → ์•ž์„œ ์„ค๋ช…ํ•œ ๊ถŒํ•œ(rw-r--r--)
    ์‹ค์ œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: lxvxxu
#include <sys/stat.h>

struct stat st;
stat("filename.txt", &st);

if (S_ISREG(st.st_mode)) {
    // ์ผ๋ฐ˜ ํŒŒ์ผ์ธ๊ฐ€?
}
if (st.st_mode & S_IRUSR) {
    // ์†Œ์œ ์ž ์ฝ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š”๊ฐ€?
}

 

๐Ÿ’ก ์ถ”๊ฐ€ ์„ค๋ช… ๋ฐ ํŒ

  • inode (i-node) ๊ฐœ๋…์ด ๋‚˜์™”๋Š”๋ฐ, ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ํŒŒ์ผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(์œ„์น˜, ๊ถŒํ•œ, ๋งํฌ ์ˆ˜ ๋“ฑ)๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. st_ino๋Š” ์ด inode ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.
  • ํ•˜๋“œ ๋งํฌ(st_nlink)๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”: ๋™์ผํ•œ inode๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ ํ•ญ๋ชฉ(directory entry)์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํŒŒ์ผ ๋ณต์ œ๊ฐ€ ์•„๋‹Œ ๋งํฌ๊ฐ€ ๊ฑธ๋ฆฐ ์ƒํƒœ์—์„œ๋„ ๊ฐ™์€ inode๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
  • st_blocks์™€ st_blksize ์ฐจ์ด๋„ ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค: st_blksize๋Š” I/O์—์„œ ๊ถŒ์žฅ๋˜๋Š” ๋ธ”๋ก ํฌ๊ธฐ(์ฝ๊ธฐ/์“ฐ๊ธฐ ํšจ์œจ์„ ์œ„ํ•ด)์ด๊ณ , st_blocks๋Š” ์‹ค์ œ ๋””์Šคํฌ์—์„œ ์ฐจ์ง€ํ•˜๋Š” ๋ธ”๋ก ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • st_atime, st_mtime, st_ctime์˜ ์ฐจ์ด๋ฅผ ์ž˜ ๊ธฐ์–ตํ•˜์„ธ์š”:
    • atime: ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฝ์€ ์‹œ๊ฐ„
    • mtime: ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚ด์šฉ์ด ์ˆ˜์ •๋œ ์‹œ๊ฐ„
    • ctime: ๋งˆ์ง€๋ง‰์œผ๋กœ ์†์„ฑ์ด ๋ณ€๊ฒฝ๋œ ์‹œ๊ฐ„(๊ถŒํ•œ, ์†Œ์œ ์ž ๋“ฑ)
  • ๊ถŒํ•œ ๋น„ํŠธ๋ฅผ AND ์—ฐ์‚ฐ(&)์œผ๋กœ ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜, ๋งคํฌ๋กœ(S_ISREG, S_ISDIR, etc.)๋กœ ํŒŒ์ผ ์ข…๋ฅ˜๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๊ฒƒ์€ ํŒŒ์ผ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.
  • ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด(0644 ๋“ฑ)์€ ์ผ๋ฐ˜์ ์œผ๋กœ 8์ง„์ˆ˜(octal) ํ‘œ๊ธฐ๋ผ๋Š” ์ ์„ ๊ธฐ์–ตํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.