본 프로젝트의 개요와 프로젝트를 진행하기 위한 개념 확립
1. access
프로세스가 지정한 파일이 존재하는지, 읽거나 쓰거나 실행이 가능한지를 확인한다. 만일 지정한 파일이 심볼릭 링크라면 링크의 원본을 확인한다.
#include <unistd.h>int access(const char *pathname, int mode)| mode | 내용 |
|---|---|
| R_OK | 읽기가 가능? |
| W_OK | 쓰기가 가능? |
| X_OK | 실행이 가능? |
| F_OK | 파일이 존재하는가? |
2. open
파일을 사용하기 위해 열기(open)한다. fopen()은 C 라이브러리에서 제공하는 함수이고 open()은 리눅스에서 제공하는 함수이다.
#include <fcntl.h>int open (const char *FILENAME, int FLAGS[, mode_t MODE])| 열기 옵션 | 설명 |
|---|---|
| O_RDONLY | 읽기 전용으로 열기 |
| O_WRONLY | 쓰기 전용으로 열기 |
| O_RDWR | 읽기와 쓰기 모두 가능 |
| O_CREAT | 해당 파일이 없으면 생성 |
| O_EXCL | O_CREAT를 했을 때, 파일이 이미 있어도 열기가 가능하며 쓰기를 하면 이전 내용 사라짐 |
| O_CREAT와 O_EXCL를 함께 사용하면, 이미 파일이 있을 때에는 open()이 되지 않아 이전 파일을 보존할 수 있음 | |
| O_TRUNC | 기존의 파일 내용을 모두 삭제 |
| O_APPEND | 파일을 추가하여 쓰기가 되도록 open 후에 쓰기 포인터가 파일의 끝에 위치하게 됨 |
3. unlink
링크를 삭제한다.
#include <unistd.h>int unlink(const char *path)4. close
open() 함수로 열기를 한 파일을 닫는다.
#include <unistd.h>int close(int fd)5. read
open() 함수로 열기를 한 파일의 내용을 읽는다.
#include <unistd.h>ssize_t read(int fd, void *buf, size_t n)6. write
open() 함수로 열기를 한 파일에 쓰기를 한다.
#include <unistd.h>ssize_t write(int fd, const void *buf, size_t n)7. malloc
메모리를 동적으로 할당받는다.
#include <stdlib.h>void *malloc(size_t size)void * 메모리가 할당된 포인터, 실패 시 NULL 반환8. waitpid
wait()함수처럼 자식 프로세스가가 종료될 때까지 대기한다. 차이점은 wait()함수가 자식 프로세스 중 어느 하나라도 종료되면 대기에서 풀리지만 waitpid()는 특정 자식 프로세스가 종료될 때까지 대기한다.
#include <sys/wait.h>pid_t waitpid(pid_t pid, int *status, int options)9. wait
자식 프로세스 작업이 끝날 때까지 대기한다.
#include <sys/wait.h>pid_t wait(int *status)10. free
malloc() 이나 calloc()에서 할당받은 메모리를 시스템에 반환한다.
#include <stdlib.h>void free(void *ptr)11. pipe
파이프를 생성하여 fildes에 파이프에 대한 fd값을 할당한다.
#include <unistd.h>int pipe(int fildes[2])dup2를 이용해서 stdout이 write end를 향하게 하고 stdin이 read end를 향하게 하는 방식으로 파이프 구현 가능하다.12. dup
파일 디스크립터 복사본을 만든다. 원본 디스크립터와 복사된 디스크립터의 읽기/쓰기 포인터는 공유된다.
#include <unistd.h>int dup(int fildes)13. dup2
fd의 파일 서술자를 복사하여 fd2에도 부여한다. (fd가 가리키는 파일을 fd2도 가리키도록)
#include <unistd.h>int dup2(int fildes, int fildes2)참고 : 파일 디스크립터 복사본을 만드는 함수로는
dup()와dup2()가 있다.dup()는 사용하지 않는 디스크립터 번호 하나가 자동으로 지정되지만dup2()는 원하는 번호를 지정할 수 있다. 지정한 번호가 이미 사용중이면 자동으로 그 파일을 닫고 다시 지정해준다.
14. execve
execve함수를 호출한 프로세스를 새 프로세스로 바꿔준다.
#include <unistd.h>int execve(const char *path, char *const argv[], char *const envp[])15. fork
현재 실행되는 프로세스에 대해 복사본 프로세스를 생성한다.
#include <unistd.h>pid_t fork(void)16. perror
전역변수 errno의 현재 값에 대응되는 에러 메시지를 표준에러로 출력해준다. (개행문자 포함)
#include <stdio.h>void perror(const char *s)17. strerror
#include <string.h>char *strerror(int errnum)18. exit
프로세스를 종료한다.
#include <stdlib.h>void exit(int status)int main() 함수의 반환값에 해당하는 정수
< : input redirection
> : output redirection
>> : output redirection
참고 사이트 :