<fcntl.h>
int open(const char *path, int oflag, ... );
path : 열고자하는 파일의 경로
oflag : 파일을 열때 사용할 옵션
반환값 : 성공적으로 open을 하게 되면 fd값을 반환하고 open에 실패했을 경우 -1을 반환하고 errno를 적절하게 설정한다
path경로에 있는 파일을 oflag를 바탕으로 열어준다
<unistd.h>
int close(int fildes);
fildes : close를 원하는 file descriptor
반환값 : close가 성공적으로 이루어졌을때는 0을 반환하고 실패했을 시 -1을 반환한다
열려있는 fd를 닫아준다정한다
close함수 메뉴얼
<unistd.h>
ssize_t read(int fildes, void *buf, size_t nbyte);
fildes : read를 원하는 file descriptor
buf : read를 한 내용을 저장할 공간
nbyte : read를 원하는 바이트 수
반환값 : 성공적으로 read를 완료하였을 시 실제로 읽어온 바이트 수를 반환 read에 실패했을 시 -1을 반환하고 errno를 적절하게 설정
열려있는 fd에서 nbyte만큼 read하여 buf안에 저장해준다
read함수 메뉴얼
unistd.h
ssize_t write(int fildes, const void *buf, size_t nbyte);
fildes : write를 원하는 file descriptor
buf : write를 하고싶은 내용
nbyte : write를 하고싶은 바이트 수
반환값 : 성공적으로 write를 완로하였을 시 실제로 쓰여진 바이트 수를 반환 write에 실패했을 시 -1을 반환하고 errno를 적절하게 설정
열려있는 fd에서 nbyte만큼 buf안에 있는 내용을 write해준다
write함수 메뉴얼
<stdlib.h>
void *malloc(size_t size);
size : 할당하고싶은 바이트 수
반환값 : 성공적으로 malloc이 이루어졌으면 할당한 공간의 포인터를 반환 실패했을 경우 널 포인터 또는 할당된 공간에 대한 포인터가 반환됩니다
size를 매개변수로 받아 size수만큼 공간을 할당하여 반환해준다
malloc함수 메뉴얼
<stdlib.h>
void free(void *ptr);
ptr : allocated된 공간의 주소값
allocation된 공간을 deallocated해준다 만약 ptr이 NULL ptr 일 경우 아무 동작도 하지않는다 만약 이미 free된 공간을 넣어줄 경우 정의되지않은 동작이 이루어질 수 있다
free함수 메뉴얼
<stdio.h>
void perror(const char *s);
s : 에러 발생 시 출력하고 싶은 문자열
전역 변수 errno 의 값을 해석하여 이에 해당하는 시스템 오류 메세지를 표준 오류 출력 스트림(stderr)에 출력한다 추가적으로 표현하고싶은 메세지가 있을 경우 s에 문자열을 넣어주면 해당 메세지를 출력한 후 시스템 오류 메세지를 출력해준다
perror함수 메뉴얼
<string.h>
char* strerror(int errnum)
errnum : 에러코드
반환값 : 에러코드에 해당하는 오류메세지를 문자열(리터럴)로 반환
에러코드를 입력으로 받아서 해당하는 오류메시지를 문자열로 반환해준다
strerror함수 메뉴얼
<unistd.h>
int access(const char *path, int amode);
path : 권한을 확인할 파일 경로
amode : 확인하고 싶은 권한 모드 파이프를 이용해 여러개를 동시에 확인할
path파일에 amode에 맞는 권한이 있는지 확인한다
access함수 메뉴얼
<unistd.h>
int dup(int fildes);
fildes : 복사를 하고싶은 file descriptor
반환값 : 성공적으로 복사가 이루어졌을 경우 복사를 해서 새로 만들어진 file descriptor를 반환하고 실패했을 시 -1을 반환하고 해당하는 errno를 설정
매개변수로 받은 file descriptor를 복사하여 새로운 file descriptor를 반환한다
dup/dup2메뉴얼
<unistd.h>
int dup2(int fildes, int fildes2);
fildes : 복사를 하고싶은 file descriptor
fildes2 : 복사를하여 새로 생길 file descriptor를 지정 만약 이미 열러있는 file descriptor일 경우 닫아주고 복사를 진행한다
반환값 : 성공적으로 복사가 이루어졌을 경우 복사를 해서 새로 만들어진 file descriptor를 반환하고 실패했을 시 -1을 반환하고 해당하는 errno를 설정
매개변수로 받은 file descriptor를 복사하여 새로운 file descriptor를 만드는데 그때 file descriptor를 fildes2로 지정해준다
<unistd.h>
int execve(const char *path, char *const argv[], char *const envp[]);
path : 실행할 프로그램의 path를 입력해준다
argv : 프로그램에 전달할 명령어 인수를 입력해준다 일반적으로 argv[0]에는 실행 프로그램의 path를 입력해준다
envp : 프로그램 시작시 사용할 환경변수를 넣어준다
반환값 : execve함수가 실패했을 시 -1을 반환한다
현재 진행중인 프로세스를 execve함수로 호출한 프로그램으로 변경하여 실행한다exec함수들 메뉴얼
stdlib.h
void exit(int status);
status : 0 또는 EXIT_SUCCESS는 정상종료를 의미하고 EXIT_FAILURE 또는 다른 int값은 오류를 의미합니다
먼저 atexit() 함수에 등록된 모든 함수를 역순으로(즉, 등록된 마지막 함수가 호출되는 첫 번째 함수임) 호출합니다. 프로그램을 종료하기 전에 버퍼를 모두 삭제하고 열린 파일을 모두 닫습니다.
exit함수 메뉴얼
unistd.h
pid_t fork(void);
반환값 : 성공적으로 fork함수가 실행되었을 시 부모 프로세스는 자식프로세스의 PID를 반환하고 자식 프로세스에게는 0을 반환합니다 그렇지 않으면 -1을 반환하고 자식프로세스는 생성되지 않습니다
fork함수는 부모 프로세스를 복사하여 자식프로세스를 하나 만든 후 호출 이후부터 각자의 메모리를 사용하여 실행됩니다
unistd.h
int pipe(int fildes[2]);
fildes[2] : pipe함수에서 생성할 file descriptor를 두개를 배열로 넣어줍니다
반환값 : 성공적으로 pipe함수가 동작했으면 0을 반환하고 오류가 발생했을 시 -1을 반환하며 errno를 설정합니다 이때 fildes는 변하지 않습니다
👀 자식 프로세스든 부모 프로세스든 사용하지 않는 파일디스크립터는 닫아야됩니다 예를 들어 자식프로세스를 읽기용으로 사용한다면 fildes[1]을 close해줘야 됩니다 이는 메모리 관리측면과 쓰기가 끝났다는것을 알려주기 위해 필요한 동작입니다
pipe함수 메뉴얼
<unistd.h>
int unlink(const char *path);
path : 삭제할 파일의 경로
반환값 : unlink함수가 정상 종료되었을경우 0을 반환하고 오류가 발생했을 경우 -1을 반환하고 errno를 설정합니다
삭제할 파일이 심볼릭 링크 파일일 경우 해당 심볼릭 파일만 삭제 시키고 하드 링크 파일일 경우 파일을 삭제하고 하드링크 카운터를 하나 감소시킵니다
unlink함수 메뉴얼
#include <sys/wait.h>
pid_t wait(int *stat_loc);
stat_loc : 자식 프로세스의 상태정보를 저장할 메모리 주소를 매개변수로 받는다
👀 자식 프로세스가 성공적으로 종료되었을 경우
반환값
wait함수는 호출하는 프로세스의 자식 프로세스 중 하나가 종료가 되거나 시그널이 발생할때 까지 부모프로세스를 정지시킵니다 또한 stat_loc를 이용하여 여러가지 상태정보를 파악할 수 있습니다
#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *stat_loc, int options);
pid : 어떤 자식프로세스 상태를 대기할지 명시해줍니다
options : 자식 프로세스에 관한 옵션들을 지정할 수 있다
반환값