System Programming Ch4
๐กย Chap_4
stat, fstat, and lstat
#include <sys/stat.h>
int stat(const char *pathname, struct stat *buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *pathname, struct stat *buf);
๐ stat, fstat : ํ์ผ ๊ตฌ์กฐ์ ๋ํ ์ค๋ช ์ ์ถ๋ ฅํ๋ค
- ํ์ผ ๊ตฌ์กฐ : i-node์ ์๋ ์ ๋ณด ์ค์ ์ฌ์ด์ฆ ๋ธ๋ก, ๋ฐ์ดํฐ ๋ช๊ฐ๊ฐ ์ฐ์, ์์ ์ฃผ๊ฐ ๋๊ตฌ์ผ.. ๋ฑ๋ฑ ์ด i-node๋ฅผ ์ฐธ์กฐํด์ ๋ณด์ฌ์ฃผ๋ ๊ฒ
lstat : ์์ ๋ถ์ l์ link, symbolic link์ ํ์ผ ๊ตฌ์กฐ๋ ์ ๋ณด๋ฅผ ๋ฐํ
Set-User-ID and Set-Group-ID
์ค์ต 6์ฃผ์ฐจ ๊ฐ์ ์๋ฃ
๐ setuid - 4 (user์ super ๊ถํ) setgid - 2 (group์ super ๊ถํ) sticky bit - 1 (other์ super ๊ถํ)
File Access Permissions
๐ Directory
R - to obtain a list of all the file names in the dir W - to create/delete a file in the directory, both X and W are necessary X - to pass through the directory comprising a pathname, also called โsearch bitโ
File
R - O_RDONLY and O_RDWR for the open function
W - O_WRONLY, O_RDWR, O_TRUNC X - exec functions
(๋จ๋ตํ) ๋๋ ํ ๋ฆฌ์ ์๋ก์ด ํ์ผ์ ๋ง๋ค ๋ ํ์ํ ๊ถํ์ ๋ฌด์์ธ๊ฐ?
โ X, W
(๋จ๋ตํ) ๋๋ ํ ๋ฆฌ์ ์กด์ฌํ๋ ํ์ผ์ ์ง์ธ ๋ ํ์ํ ๊ถํ์ ๋ฌด์์ธ๊ฐ?
โ X, W
๐ access Function
- ์ ๊ทผ ๊ถํ์ด ์ ํจํ์ง๋ฅผ ํ๋จํด์ ๋ฐํํด์ฃผ๋ ํจ์
- ์ ๊ทผํ ๋ ์ฐ๋ ๊ฒ์ด ์๋, ์ ๊ทผํ ์ ์๋ ๊ถํ์ด ์๋์ง ์๋์ง๋ฅผ ๋ฐํํด์ค
#include <unistd.h>
int access(const char *pathname, int mode);
mode : R_OK(R๊ถํ์ด ์์ผ๋ฉด 0 ๋ฐํ, ์์ผ๋ฉด ์์ ๋ฐํ), W_OK, X_OK, F_OK(R,W,X ์ ๋ถ ๋ค)
๐ umask Function
#include <sys/stat.h>
mode_t umask(mode_t, cmask);
ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ ๋, ์ด๊ธฐ๊ถํ์ ๋ญ๋ก ์ค์ง ๊ฒฐ์ ์ง์ ์ ์๋ ํจ์
ํ์ผ์ ์คํ๊ถํ(X)์ด ํ์์์ ์ฆ, ํ์ผ์ ์ต๋๊ถํ์ 666
ํ์ผ์ ์ต๋ ๊ถํ 666 666 umask 002 004 umask๋ฅผ ๋ง๋ค๊ณ ๋ฐ๋ ๊ถํ 664 662 - umask๋ ํ์ผ์ ์ต๋๊ถํ์์ ์ง๊ธ ์ธํ ๋์ด์๋ ์ ๋ง์คํฌ ๊ฐ์ ๋บ ๊ฐ์ผ๋ก ํ์ผ์ ์์ฑํจ
- umask๋ ํจ์, cmask๋ ์ธ์ (umask์ cmask ๊ฐ์ ์๋ฏธ๋ ๋์ผ)
#include "apue.h"
#include <fcntl.h>
#define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
int main(void)
{ //ํ์ผ์ ์ต๋ ๊ถํ์ 666
umask(0); //umask 0
if(creat("foo", RWRWRW) < 0) //foo๋ 666์ผ๋ก ์์ฑ
err_sys("creat error for foo")
umask(S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); //umask 066
if(creat("bar", RWRWRW) < 0)//bar๋ 600์ผ๋ก ์์ฑ
err_sys("creat error for bar");
exit(0);
}
๐ chmod, fchmod Functions
- chmod : change mode, ํ์ผ์ ์ ๊ทผ ๊ถํ์ ๋ฐ๊ฟ ๋ ์ฐ๋ ํจ์
- fchmod : ๊ฐ์ ์ญํ , ์ธ์๋ง ๋ค๋ฆ
๐ Sticky Bit
- 1000์ผ๋ก ์ธํ ๋ ํน์๊ถํ
๐ chown, fchown, and lchown
- chown : ์์ ์์ ์์ ๊ทธ๋ฃน์ ๋ฐ๊พธ๋ ํจ์
- fchown : ์ธ์๋ง ๋ค๋ฆ
- lchown : symbolic link ์์ฒด์ ์์ ์ฃผ์ ์์ ๊ทธ๋ฃน์ ๋ฐ๊ฟ
๐ File Truncation
(๋จ๋ตํ) ๋ค์ ์ค ์ธ์๋ก ๋๊ฒจ์ฃผ๋ length๋งํผ ์๋ผ๋ด๋ ํจ์๋ ๋ฌด์์ธ๊ฐ?
โ truncate, ftruncate
Symbolic Links (์ํ๋ฌธ์ 100% ๋์ด)
๊ทธ๋ฆผ, ์ฝ๋ ์ ๋ถ ์ธ์ฐ๊ธฐ
๐
- foo directory ์์ file a ๋ testdir directory๊ฐ ์์
ln -s ../foo foo/testdir
โ> testdir์ด ์๊ธฐ ๋ถ๋ชจ์ธ foo directory๋ฅผ ํฌ์ธํ ํจ (symbolic link๋ฅผ ๊ฑธ์์)
*directory๋ฅผ link ๊ฑธ ์ ์๋ ๊ฑด ๋ฌด์กฐ๊ฑด ์ค๋ก์ง root ์ฌ์ฉ์๋ง (superuser๋ง)
๐ Symbolic Links
- symbolic link (=soft link) ๋ hard link ์ ๋๋น๋จ
- H1์ ์์ค๋ก ํ๋ hard link๋ฅผ ๊ฑด H2, H3๋ฅผ ์์ฑํ๋ฉด ์์ ๊ฐ์ ํํ๊ฐ ๋จ
- Hard link๋ ๊ฐ์ i-node๋ฅผ ๊ฐ๋ฆฌํด
- soft link๋ s1์ ์๋ณธ์ผ๋ก s2๋ฅผ ๋ง๋ค ๋, s2๋ ๋ ๋ฆฝ์ ์ธ i-node๋ฅผ ํฌ์ธํ ํ๋๋ฐ, ๊ทธ i-node๊ฐ origin์ ํฌ์ธํ ํ๊ฒ๋จ
- hard link๋ H1์ ์ญ์ ํด๋ H2, H3์ ์ํฅ์ ๋ฏธ์น์ง ์์ง๋ง,
- soft link๋ S1์ ์ญ์ ํ๋ฉด i-node๋ ๊ฐ์ด ์ญ์ ๋๋ฏ๋ก S2๋ฅผ ์ด ์ ์์
- soft link๋ ๋ฐ๋ก๊ฐ๊ธฐ ๋ผ๊ณ ํจ, ์๋ณธ์ ๋ณต์ ๋ ํ์ง๋ง ๊ทธ ์์ฒด๋ฅผ ๋ณต์ ํ๋ ๊ฒ์ด ์๋ ๊ทธ ์๋ณธ์ ํฌ์ธํ ํ๋ ๋ญ๊ฐ๋ฅผ ๋ง๋ฌ
๐ symlink, readlink Function
#include <unistd.h>
int symlink(const char *actualpath, const char *sympath);
symlink : symbolic link๋ฅผ ์์ฑํ ๋ ์ฐ๋ ํจ์
#include <unistd.h>
ssize_t readlink(const char *pathname, char *buf, size_t bufsize);
readlink : link๊ฐ ๊ฑธ๋ ค์๋, ์ค์ ํฌ์ธํ ํ๊ณ ์๋ ํ์ผ์ ์คํํด์ฃผ๋, ์ฝ์ด์ฃผ๋ ํจ์ (equivalent to the actions of open, read, and close)
๐ link, unlink, remove, and rename Functions
- link : hard link๋ฅผ ๋ง๋ฌ
- unlink
- remove : file์ ์ฐ๋ฉด unllink์ ๊ฐ์ ํจ๊ณผ, ๋๋ ํ ๋ฆฌ์ ์ฐ๋ฉด rmdir๊ณผ ๊ฐ์ ํจ๊ณผ
- rename
symclink๋ฅผ ์ค๋ช ํ ๋๋ ๋ฌด์กฐ๊ฑด symbolic link๊ฐ ๋์ด
์ด๋ฐ ๋ด์ฉ์ด ์๋์ค๋ฉด ๋ฌด์กฐ๊ฑด link ํจ์
๐ utime Function
#include <sys/types.h>
#include <utime.h>
int utime(const char *pathname, const struct utimbuf *times);
struct utimbuf{
time_t actime /* access time */
time_t modtime /* modification time */
}
- ํ์ผ์ ์ ๊ทผํ ์๊ฐ(์์ฑํ ์๊ฐ)๊ณผ ๋ณ๊ฒฝํ ์๊ฐ์ ์๊ณ ์ถ์ ๋ ์ฐ๋ ํจ์
๐ mkdir and rmdir Fuction mkdir : make directory rmdir : remove directory
๐ chdir, fchdir, and getcwd
chdir : change directory, ๋ด๊ฐ ํ์ฌ ์์ ํ๊ณ ์๋ ๊ณณ(working directory)์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๊ฟ ๋ ์ฐ๋ ํจ์
fchdir : ์ธ์๋ง ๋ค๋ฆ
getcwd : current working directory์ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๊ณ ์ค๋ ํจ์