์ฌ์ฉ ๊ฐ๋ฅ ํจ์
- #include <fcntl.h>
- int open (const char *name, int flags, mode_t mode); const char* name : ํ์ผ์ ์ ๋ ๊ฒฝ๋ก ํน์ ์๋ ๊ฒฝ๋ก์ด๊ฑฐ๋ ํ์ผ ์ด๋ฆ์ด๋ค. int flags : ๋ฐ๋์ O_RDONLY , O_WRONLY, O_RDWR ๊ฐ๋ค ์ค ํ๋์ด์ด์ผ ํ๋ค. ๊ฐ๊ฐ "์ฝ๊ธฐ ์ ์ฉ", "์ฐ๊ธฐ ์ ์ฉ", "์ฝ๊ธฐ ์ฐ๊ธฐ"๋ฅผ ๋ํ๋ธ๋ค. ๋ช ๊ฐ์ง ๋ค๋ฅธ ๊ฐ๋ค๊ณผ or ์ฐ์ฐ์ ํตํ์ฌ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค. mode_t mode : flags์ O_CREAT๊ฐ ํฌํจ๋์ด์๋ ๊ฒฝ์ฐ ์๋ก ๋ง๋ค์ด์ง๋ ํ์ผ์ ๊ถํ์ ์ค์ ํ๋ค. - int close (int fd);
- #include <unistd.h>
- ssize_t read(int fd, void *buf, size_t count); - ssize_t write(int fd, const void *buf, size_t count); - int access(const char *pathname, int mode); int mode ์ข ๋ฅ R_OK : ํ์ผ ์กด์ฌ ์ฌ๋ถ, ์ฝ๊ธฐ ๊ถํ ์ฌ๋ถ W_OK : ํ์ผ ์กด์ฌ ์ฌ๋ถ, ์ฐ๊ธฐ ๊ถํ ์ฌ๋ถ X_OK : ํ์ผ ์กด์ฌ ์ฌ๋ถ, ์คํ ๊ถํ ์ฌ๋ถ F_OK : ํ์ผ ์กด์ฌ ์ฌ๋ถ ## ์์ ## int main(void) { char *pathname = "./hello.txt"; int mode = R_OK | W_OK; // ๋นํธ ์ฐ์ฐ์ผ๋ก ์ฌ๋ฌ๊ฐ์ง๋ฅผ ํ๋ฒ์ ์ฒดํฌ ๊ฐ๋ฅํ๋ค. if( access( pathname, mode ) == 0 ) { printf("์ฝ๊ณ ์ธ ์ ์์ต๋๋ค."); } else{ printf("๊ถํ์ด ์๊ฑฐ๋ ์กด์ฌํ์ง ์์ต๋๋ค."); } } - int dup(int fd); dup๋ fd๋ก ์ ๋ฌ๋ฐ์ ํ์ผ ์์ ์๋ฅผ ๋ณต์ ํ์ฌ ๋ฐํํฉ๋๋ค. dup๊ฐ ๋๋ ค์ฃผ๋ ํ์ผ ์์ ์๋ ๊ฐ์ฅ ๋ฎ์ ์์ ์๋ฅผ ๋ฐํํฉ๋๋ค. ์ฑ๊ณต์ ์ ํ์ผ ์์ ์, ์ค๋ฅ์ -1์ ๋ฐํํฉ๋๋ค. - int dup2(int fd, int fd2); dup2๋ ์ ์์ ์์ ๊ฐ์ fd2๋ก ์ง์ ํฉ๋๋ค. ๋ง์ผ fd2๊ฐ ์ด๋ฏธ ์ด๋ ค์์ผ๋ฉด fd2๋ฅผ ๋ซ์ ํ ๋ณต์ ๊ฐ ๋ฉ๋๋ค ์ญ์ ์ฑ๊ณต์ ์ ํ์ผ ์์ ์, ์ค๋ฅ์ -1์ ๋ฐํํฉ๋๋ค. ## dup, dup2 ์์ ๋งํฌ (https://reakwon.tistory.com/104) - int execve(const char *filename, char *const argv[], char *const envp[]); execve ๋ ๋ค๋ฅธ ์คํ ํ์ผ์ ์คํ ์ํค๋ ํจ์๋ผ ์๊ฐํ๋ฉด ๋๋ค. execve(์คํ ํ์ผ, ์คํํ์ผ argv๋ฐฐ์ด, ํ๊ฒฝ๋ณ์??); - pid_t fork(void); ํ์ฌ ์คํ๋๋ ํ๋ก์ธ์ค์ ๋ํด ๋ณต์ฌ๋ณธ ํ๋ก์ธ์ค๋ฅผ ์์ฑํฉ๋๋ค. forkํจ์๋ฅผ ํธ์ถํ๋ ํ๋ก์ธ์ค๊ฐ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋๊ณ , ์๋กญ๊ฒ ์์ฑ๋๋ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๊ฐ ๋๋ค. ์์ ํ๋ก์ธ์ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํ์ฌ ๊ฐ์ง๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ forkํจ์ ํธ์ถ ์ดํ ์ฝ๋๋ถํฐ๋ ๊ฐ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์คํ ๋๋ค. (๋ฐํ๊ฐ) ์ฑ๊ณต์ : ๋ถ๋ชจ ํ๋ก์ธ์ค์์๋ ์์ ํ๋ก์ธ์ค์ PID๊ฐ์ ๋ฐํ ๋ฐ์, ์์ ํ๋ก์ธ์ค์์๋ 0 ๊ฐ์ ๋ฐํ ๋ฐ์. ์คํจ์ : ์์ ๊ฐ -1 ๋ฐํ - int pipe(int fd[2]); ํ์ดํ(Pipe)๋ ํ๋ก์ธ์ค๊ฐ ํต์ ์ ํ ๋ ์ฌ์ฉํ๋ ์ปค๋ฎค๋์ผ์ด์ ์ ํ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ฐ์ฅ ์ค๋๋ UNIX ์์คํ ์ IPC๋ก ๋ชจ๋ ์ ๋์ค ์์คํ ์ด ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง ๋๊ฐ์ง ์ ๋์ ํ๊ณ์ ์ด ์์ต๋๋ค. ์ฒซ๋ฒ์งธ ํ๊ณ์ ์ผ๋ก ํ์ดํ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ด์ค ๋ฐฉ์์ ๋๋ค. ๋ฌผ๋ก ์ ์ด์ค ๋ฐฉ์์ ์ง์ํ๋ ์์คํ ์ด ์๊ธด ํ๋, ์ต๋์ ์ด์์ฑ์ ์ํด์๋ ํ์ดํ๋ ๋ฐ์ด์ค ๋ฐฉ์์ด๋ผ๋ ์๊ฐ์ ํด์ผํฉ๋๋ค. ์ด๊ฒ์ FIFO๋ผ๋ ๋ช ๋ช ๋ ํ์ดํ๋ก ๊ทน๋ณตํ ์ ์์ต๋๋ค. ๋๋ฒ์งธ ํ๊ณ์ ์ผ๋ก๋ ๋ถ๋ชจ, ์์ ๊ด๊ณ์์์ ํ๋ก์ธ์ค๋ค๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ถ๋ชจํ๋ก์ธ์ค๊ฐ ํ์ดํ๋ฅผ ์์ฑํ๊ณ , ์ดํ ์์ ํ๋ก์ธ์ค์ ๋ถ๋ชจํ๋ก์ธ์ค๊ฐ ํ์ดํ๋ฅผ ์ด์ฉํ์ฌ ํต์ ํฉ๋๋ค. ์ด๋ฌํ ํ๊ณ์ ์ด ์๊ธด ํ์ง๋ง ์ฌ์ ํ ์ธ๋ชจ์๋ IPC๊ธฐ๋ฒ์ ๋๋ค. (๋ฆฌํด๊ฐ) ์ฑ๊ณต : 0 ์คํจ : -1 - int unlink(const char *pathname); ํ์ผ์ ์ญ์ ํ๋ system call ํจ์์ ๋๋ค. ์ ํํ๊ฒ๋ unlink๋ hard link์ ์ด๋ฆ์ ์ญ์ ํ๊ณ hard link๊ฐ ์ฐธ์กฐํ๋ count๋ฅผ 1๊ฐ์์ํต๋๋ค. hard link์ ์ฐธ์กฐ count๊ฐ 0์ด ๋๋ฉด, ์ค์ ํ์ผ์ ๋ด์ฉ์ด ์ ์ฅ๋์ด ์๋ disk space๋ฅผ freeํ์ฌ OS๊ฐ ๋ค๋ฅธ ํ์ผ์ ์ํด์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. ๋ฐ๋ผ์ hard link๋ฅผ ์์ฑํ์ง ์์ ํ์ผ์ ๋ฐ๋ก disk space๋ฅผ ํด์ ํ์ฌ ์ฌ์ค์ ํ์ผ ์ญ์ ํฉ๋๋ค.
์ฐธ์กฐ
- #include <stdlib.h>
- void* malloc(size_t size); - void free(void *ptr); - void exit(int status);
- #include <string.h>
- char* strerror(int errnum); errnum ์ ๊ฐ์ ํตํด ๋ฐ์ํ์๋ ์ค๋ฅ์ ์๋ง์ ์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๋ฆฌํดํ๋ค. ์ด ๋ ๋ฆฌํด๋๋ ํฌ์ธํฐ๋ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ๊ฐ๋ฆฌํค๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ทธ ๋ด์ฉ์ด ๋ฐ๋ ์ ์๋ค.
- #include <stdio.h>
- void perror(const char* str); ์ ์ญ ๋ณ์ errno ์ ๊ฐ์ ํด์ํ์ฌ ์ด์ ํด๋นํ๋ ์์คํ ์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ ํ์ค ์ค๋ฅ ์ถ๋ ฅ ์คํธ๋ฆผ(stderr)์ ์ถ๋ ฅํ๋ค. ๋ํ ์ถ๊ฐ์ ์ผ๋ก ์ ๋ฌํ๊ณ ์ ํ๋ ์ฌ์ฉ์ ์ ์ ๋ฉ์ธ์ง๋ฅผ str ์ธ์์ ๋ด์ ์ถ๋ ฅํ ์ ๋ ์๋ค.-
- #include <sys/wait.h>
pid_t wait(int *statloc); ์ฑ๊ณต : ํ๋ก์ธ์ค ID ๋ฐํ ์ค๋ฅ : -1 ๋ถ๋ชจ ํ๋ก์ธ์ค๋ waitํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ๋ก์ธ์ค์ ์ข ๋ฃ ์ํ๋ฅผ ์ป์ ์ ์๋ค. ๋ค๋ฅธ ๋ง๋ก waitํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ์ ์๋ค. wait() ํจ์๋ ์๋์ ๊ฐ์ด ๋์ํฉ๋๋ค. 1. ์์ ํ๋ก์ธ์ค๊ฐ ๋์ ์ค์ด๋ฉด ํธ์ถ ์ฐจ๋จ์ด ์ฐจ๋จ๋๊ธฐ ๋๋ฌธ์ ์ํ๋ฅผ ์ป์ด์ฌ ๋๊น์ง ๋๊ธฐ 2. wait() ํจ์ ํธ์ถ์๊ฐ ์๊ทธ๋์ ๋ฐ์ ๋๊น์ง ๋๊ธฐ 3. ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ์ํ๋ผ๋ฉด ์ฆ์ ํธ์ถ์ด ๋ฐํ๋์ด ์ํ๋ฅผ ์ป์, ์ด ๋ wait() ํจ์๋ ์์ ํ๋ก์ธ์ค์ ํ๋ก์ธ์ค ID๋ฅผ ๋ฐํ 4. ์์ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด ํธ์ถ์ด ์ฆ์ ๋ฐํ๋๋ฉฐ, ์๋ฌ๊ฐ์ ๋ฐํ ๋งคํฌ๋ก ์ค๋ช - WIFEXITED(statloc) ์์ ํ๋ก์ธ์ค๊ฐ ์ ์์ ์ผ๋ก ์ข ๋ฃ๋์๋ค๋ฉด TRUE WIFSIGNALED(statloc) ์์ ํ๋ก์ธ์ค๊ฐ ์๊ทธ๋์ ์ํด ์ข ๋ฃ๋์๋ค๋ฉด TRUE WIFSTOPPED(statloc) ์์ ํ๋ก์ธ์ค๊ฐ ์ค๋จ๋์๋ค๋ฉด TRUE WEXITSTATUS(statloc) ์์ ํ๋ก์ธ์ค๊ฐ ์ ์ ์ข ๋ฃ๋์์ ๋ ๋ฐํํ ๊ฐ pid_t waitpid(pid_t pid, int *statloc , int options); // ์ฒซ๋ฒ์งธ ์ธ์ if (pid < -1) ํ๋ก์ธ์ค ๊ทธ๋ฃน ID๊ฐ pid์ ์ ๋๊ฐ๊ณผ ๊ฐ์ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ค๋ฆผ else if(pid == -1) ์์์ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ค๋ฆผ else if (pid == 0) waitpid๋ฅผ ํธ์ถํ ํ๋ก์ธ์ค์ ํ๋ก์ธ์ค ๊ทธ๋ฃน PID์ ๊ฐ์ ํ๋ก์ธ์ค ๊ทธ๋ฃน ID๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ค๋ฆผ else if (pid > 0) ํ๋ก์ธ์ค ID๊ฐ pid์ธ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ค๋ฆผ // ๋๋ฒ์งธ ์ธ์ if (์์ ํ๋ก์ธ์ค๊ฐ ์ ์์ ์ผ๋ก ์ข ๋ฃ) waitpid ๋ฐํ๊ฐ = ํ๋ก์ธ์ค id WIFEXITED(statloc) ๋งคํฌ๋ก๊ฐ true๋ฅผ ๋ฐํ ํ์ 8๋นํธ๋ฅผ ์ฐธ์กฐํ์ฌ ์์ ํ๋ก์ธ์ค๊ฐ exit, _exit, _Exit์ ๋๊ฒจ์ค ์ธ์๊ฐ์ ์ป์ ์ ์์, WEXITSTATUS(statloc) else if(์์ ํ๋ก์ธ์ค๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ) waitpid ๋ฐํ๊ฐ = ํ๋ก์ธ์ค id WIFSIGNALED(statloc) ๋งคํฌ๋ก๊ฐ true๋ฅผ ๋ฐํ ๋น์ ์ ์ข ๋ฃ ์ด์ ๋ฅผ WTERMSIG(statloc) ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ ์ ์์ else if(waitpid ํจ์ ์ค๋ฅ) waitpid ๋ฐํ๊ฐ = -1 ECHILD : ํธ์ถ์์ ์์ ํ๋ก์ธ์ค๊ฐ ์๋ ๊ฒฝ์ฐ EINTR : ์์คํ ์ฝ์ด ์ธํฐ๋ฝํธ ๋์์ ๋ // ์ธ๋ฒ์งธ ์ธ์ if( options == WCONTINUED ) ์ค๋จ ๋์๋ค๊ฐ ์ฌ๊ฐ๋ ์์ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ฐ์ else if( options == WNOHANG ) ๊ธฐ๋ค๋ฆฌ๋ PID๊ฐ ์ข ๋ฃ๋์ง ์์์ ์ฆ์ ์ข ๋ฃ ์ํ๋ฅผ ํ์ ํ ์ ์๋ ์ํฉ์์ ํธ์ถ์๋ ์ฐจ๋จ๋์ง ์๊ณ ๋ฐํ๊ฐ์ผ๋ก 0์ ๋ฐ์ else if( options == WUNTRACED ) ์ค๋จ๋ ์์ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ฐ์
์ฐธ์กฐ
PID ๋??`
pid๋ process id์ ์ค์๋ง๋ก ์ด์์ฒด์ ์์ ํ๋ก์ธ์ค๋ฅผ ์๋ณํ๊ธฐ ์ํด ๋ถ์ฌํ๋ ๋ฒํธ๋ฅผ ์๋ฏธํ๋ค.
ํ๋ก์ธ์ค๋ ์คํ์ค์ธ ํ๋ก๊ทธ๋จ์ ์๋ฏธํ๋ค. pid๋ ์ต๊ทผ ํ ๋นํ pid์ 1์ ๋ํ ๊ฐ์ผ๋ก ํ ๋นํด์ค๋ค.
์ค๋ ๋๋???
ํ๋ก์ธ์ค ๋ด์์ ์ค์ ๋ก ์์
์ โฉ์ํํ๋ ์ฃผ์ฒด๋ฅผ ์๋ฏธํ๋ค.(ํ๋ก์ธ์ค ๋ด๋ถ cpu ์ํ ๋จ์) ๋ชจ๋ ํ๋ก์ธ์ค์๋ ํ๊ฐ ์ด์์ ์ค๋ ๋๊ฐ ์กด์ฌํ์ฌ ์์
์ ์ํํ๊ณ , ๋ ๊ฐ ์ด์์ ์ค๋ ๋๋ฅผ ๊ฐ์ง๋ ํ๋ก์ธ์ค๋ฅผ ๋ฉํฐ์ค๋ ๋ ํ๋ก์ธ์ค๋ผ๊ณ ํ๋ค.
์ฐธ์กฐ
๋นํธ์ฐ์ฐ์
์ฐ์ฐ์ | ์ฐ์ฐ์์ ๊ธฐ๋ฅ |
& | ๋นํธ๋จ์๋ก AND ์ฐ์ฐ์ ํ๋ค. |
| | ๋นํธ๋จ์๋ก OR ์ฐ์ฐ์ ํ๋ค. |
^ | ๋นํธ๋จ์๋ก XOR ์ฐ์ฐ์ ํ๋ค. |
~ | ๋จํญ ์ฐ์ฐ์๋ก์ ํผ์ฐ์์ ๋ชจ๋ ๋นํธ๋ฅผ ๋ฐ์ ์ํจ๋ค. |
<< | ํผ์ฐ์ฐ์์ ๋นํธ ์ด์ ์ผ์ชฝ์ผ๋ก ์ด๋์ํจ๋ค. |
>> | ํผ์ฐ์ฐ์์ ๋นํธ ์ด์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํจ๋ค. |
๊ฐ ์ฐ์ฐ์ ์์
& ์ฐ์ฐ์ (๋๋ค 1์ผ๋)
์ฐ์ฐ | ๊ฒฐ๊ณผ |
0 & 0 | 0 |
0 & 1 | 0 |
1 & 0 | 0 |
1 & 1 | 1 |
- ์์
#include<stdio.h> int main() { int num1 = 15; int num2 = 20; int num3 = num1 & num2; printf("and ์ฐ์ฐ ๊ฒฐ๊ณผ : %d\n",num3); } ///////////////๊ณผ์ ////////////////// /* 00001111 => 15 &00010100 => 20 --------- 00000100 => 4 */ ///////////////๊ฒฐ๊ณผ////////////////// /* and ์ฐ์ฐ ๊ฒฐ๊ณผ : 4 */
| ์ฐ์ฐ์ (ํ๋๋ผ๋ 1์ด๋ฉด)
์ฐ์ฐ | ๊ฒฐ๊ณผ |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
- ์์
#include<stdio.h> int main() { int num1 = 15; int num2 = 20; int num3 = num1 | num2; printf("or ์ฐ์ฐ ๊ฒฐ๊ณผ : %d\n",num3); } ///////////////๊ณผ์ ////////////////// /* 00001111 => 15 &00010100 => 20 --------- 00011111 => 31 */ ///////////////๊ฒฐ๊ณผ////////////////// /* or ์ฐ์ฐ ๊ฒฐ๊ณผ : 31 */
^ ์ฐ์ฐ์ (์๋ก ๋ค๋ฅผ๋ 1)
์ฐ์ฐ | ๊ฒฐ๊ณผ |
0 ^ 0 | 0 |
0 ^ 1 | 1 |
1 ^ 0 | 1 |
1 ^ 1 | 0 |
- ์์
#include<stdio.h> int main() { int num1 = 15; int num2 = 20; int num3 = num1 ^ num2; printf("xor ์ฐ์ฐ ๊ฒฐ๊ณผ : %d\n",num3); } ///////////////๊ณผ์ ////////////////// /* 00001111 => 15 &00010100 => 20 --------- 00011011 => 27 */ ///////////////๊ฒฐ๊ณผ////////////////// /* xor ์ฐ์ฐ ๊ฒฐ๊ณผ : 27 */
~ ์ฐ์ฐ์ (๋ฐ์ , ๋ณด์์ฐ์ฐ)
์ฐ์ฐ | ๊ฒฐ๊ณผ |
~ 0 | 1 |
~ 1 | 0 |
- ์์
#include<stdio.h> int main() { int num1 = 15; int num2 = ~num1; printf("NOT ์ฐ์ฐ ๊ฒฐ๊ณผ : %d\n",num2); } ///////////////๊ณผ์ ////////////////// /* ~00001111 => 15 --------- 00010000 => -16 */ ///////////////๊ฒฐ๊ณผ////////////////// /* NOT ์ฐ์ฐ ๊ฒฐ๊ณผ : -16 */
- ๋ณด์ ์์
7 => 0111 -8 => 1000 -n == n-1์ ๋ค์ง์ ๊ฒฐ๊ณผ
<< ์ฐ์ฐ์ && >> ์ฐ์ฐ์
๋นํธ๋ฅผ ์ฐ์ฐ์ ๋ฐฉํฅ์ผ๋ก ์ด๋์ํค๋ shift์ฐ์ฐ์ด๋ค.
#include<stdio.h> int main() { int num1 = 15; int num2 = num1 << 1; int num3 = num1 << 2; int num4 = num1 >> 1; int num5 = num1 >> 2; printf("<< 1์นธ์ด๋ ๊ฒฐ๊ณผ : %d\n<< 2์นธ์ด๋ ๊ฒฐ๊ณผ : %d\n",num2,num3); printf(">> 1์นธ์ด๋ ๊ฒฐ๊ณผ : %d\n<< 2์นธ์ด๋ ๊ฒฐ๊ณผ : %d\n",num4,num5); } ///////////////๊ณผ์ ////////////////// /* 00001111 00011110 << 1 00111100 << 2 00000111 >> 1 00000011 >> 2 */ ///////////////๊ฒฐ๊ณผ////////////////// /* << 1์นธ์ด๋ ๊ฒฐ๊ณผ : 30 << 2์นธ์ด๋ ๊ฒฐ๊ณผ : 60 // << ๋ ๋๋ฐฐ์ฉ ์ ์ฉ๋๋๊ฒ์ ํ์ธ ํ ์ ์๋ค. >> 1์นธ์ด๋ ๊ฒฐ๊ณผ : 7 << 2์นธ์ด๋ ๊ฒฐ๊ณผ : 3 */
ย
๋ฆฌ๋ค์ด๋ ์
๋ฆฌ๋
์ค์์ ํ๋ก๊ทธ๋จ์ ๋ณดํต ์ธ๊ฐ์ ํ์ผ ์์ ์๋ฅผ ์ด๊ฒ๋๋ค. ํ์ค์
๋ ฅ, ํ์ค์ถ๋ ฅ, ํ์ค์๋ฌ
- cmd > file_name ํ์ผ์ ๋ฎ์ด์ฐ๊ธฐ ์ ์ฅ์ด ๋๋ค.
ls -l 10 > test.txt ์ ๊ฐ์ด ์์ฑ์ ํ๋ฉด ์๋ฌ ๋ฐ์์ผ๋ก ์๋ฌด๊ฒ๋ ์ ์ฅ๋์ง ์๋๋ค. ํ์ง๋ง ls -l 10 2> test.txt ์ ๊ฐ์ด ์์ฑํ๋ฉด ์๋ฌ ๋ฉ์ธ์ง๊ฐ ์ ์ฅ๋๋ค. ํ์ค ์ ์ถ๋ ฅ์๋ฌ 012
- cmd >> file_name
ํ์ผ์ ์ด์ด์ ์ ์ฅ์ด ๋๋ค.
- cmd < file_name
file_name ์ ํ์ผ ๋ด์ฉ์ ํ์ค ์
๋ ฅ์ผ๋ก ์ฌ์ฉ ํ๋ค๋ ์๋ฏธ์ด๋ค.
cat test.txt test text file!! sed 's/test/@@@/' < test.txt test @@@ file!!
- ์์
< input cat | grep 'hi' > output < input == inputํ์ผ์ ๋ด์ฉ์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๋ค. cat | grep 'hi' > output == ์ ๋ ฅ์ ๋ํด cat | grep 'hi' ํ ์ถ๋ ฅ์ output์ ๋ฎ์ด์ฐ๊ธฐํ๋ค.
here_doc
tag ํน์ eof์ ๋๋ฌํ ๋๊น์ง์ ์
๋ ฅ์ ํ์ค์
๋ ฅ์ผ๋ก ๋ฐ๋ ๋ฐฉ๋ฒ์ด๋ค.
cat << END ์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ์ ๋ ฅ์ผ๋ก END ํน์ eof๋ฅผ ์ฃผ๊ธฐ์ ๊น์ง ์ ๋ ฅ์ ๋ฐ๋๋ค. ์ดํ ์ปค๋งจ๋๋ฅผ ์คํ ์ํจ๋ค.
์ฃผ์ํด์ผ ํ ์
ย
ย
Loading Comments...