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 ๊ตฌ์กฐ์ฒด๋ ํ์ผ์ ๊ดํ ์ฌ๋ฌ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ผ๋ฉฐ, ๊ทธ ์ฃผ์ ๋ฉค๋ฒ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
| 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) ํ๊ธฐ๋ผ๋ ์ ์ ๊ธฐ์ตํ๋ฉด ์ค๋ฅ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
'6. CS ๊ธฐ์ด ๐ > Linux & Unix ๐ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Linux/Unix][6-1] txt write err ์ฒ๋ฆฌ (0) | 2025.10.21 |
|---|---|
| [Linux/Unix][5-2] ํ๋ ๋งํฌ vs ์ฌ๋ณผ๋ฆญ ๋งํฌ (0) | 2025.10.21 |
| [Linux/Unix][4-3] Inode ์ ๋ณด ์ถ๋ ฅ (0) | 2025.10.21 |
| [Linux/Unix][4-2] inode์ ์ ๋ณด (0) | 2025.10.21 |
| [Linux/Unix][4-1] UNIX ํ์ผ ์ข ๋ฅ (0) | 2025.10.21 |