pipex 허용 함수 정리

이민규·2023년 7월 8일
0

42seoul

목록 보기
15/24

open

<fcntl.h>

int open(const char *path, int oflag, ... );

path : 열고자하는 파일의 경로
oflag : 파일을 열때 사용할 옵션
반환값 : 성공적으로 open을 하게 되면 fd값을 반환하고 open에 실패했을 경우 -1을 반환하고 errno를 적절하게 설정한다

path경로에 있는 파일을 oflag를 바탕으로 열어준다

open함수 flag

  • O_RDONLY: 읽기 전용으로 파일을 엽니다.
  • O_WRONLY: 쓰기 전용으로 파일을 엽니다.
  • O_RDWR: 읽기 및 쓰기가 가능하도록 파일을 엽니다.
  • O_CREAT: 파일이 존재하지 않을 경우 새로운 파일을 생성합니다. 이 플래그를 사용할 때는 mode도 함께 지정해야 합니다.
  • O_TRUNC: 파일을 열 때 기존 내용을 모두 지웁니다.
  • O_APPEND: 파일을 열 때 기존 내용을 유지하면서 파일 끝에 새로운 데이터를 추가합니다.
  • O_EXCL: 파일이 이미 존재하는 경우 에러를 발생시킵니다. O_CREAT와 함께 사용됩니다.
    open함수 메뉴얼

close

<unistd.h>

int close(int fildes);

fildes : close를 원하는 file descriptor
반환값 : close가 성공적으로 이루어졌을때는 0을 반환하고 실패했을 시 -1을 반환한다

열려있는 fd를 닫아준다정한다
close함수 메뉴얼

read

<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함수 메뉴얼

write

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함수 메뉴얼

malloc

<stdlib.h>

void *malloc(size_t size);

size : 할당하고싶은 바이트 수
반환값 : 성공적으로 malloc이 이루어졌으면 할당한 공간의 포인터를 반환 실패했을 경우 널 포인터 또는 할당된 공간에 대한 포인터가 반환됩니다

size를 매개변수로 받아 size수만큼 공간을 할당하여 반환해준다
malloc함수 메뉴얼

free

<stdlib.h>

void free(void *ptr);

ptr : allocated된 공간의 주소값

allocation된 공간을 deallocated해준다 만약 ptr이 NULL ptr 일 경우 아무 동작도 하지않는다 만약 이미 free된 공간을 넣어줄 경우 정의되지않은 동작이 이루어질 수 있다
free함수 메뉴얼

perror

<stdio.h>

void perror(const char *s);

s : 에러 발생 시 출력하고 싶은 문자열

전역 변수 errno 의 값을 해석하여 이에 해당하는 시스템 오류 메세지를 표준 오류 출력 스트림(stderr)에 출력한다 추가적으로 표현하고싶은 메세지가 있을 경우 s에 문자열을 넣어주면 해당 메세지를 출력한 후 시스템 오류 메세지를 출력해준다
perror함수 메뉴얼

strerror

<string.h>

char* strerror(int errnum)

errnum : 에러코드
반환값 : 에러코드에 해당하는 오류메세지를 문자열(리터럴)로 반환

에러코드를 입력으로 받아서 해당하는 오류메시지를 문자열로 반환해준다
strerror함수 메뉴얼

access

<unistd.h>

int access(const char *path, int amode);

path : 권한을 확인할 파일 경로
amode : 확인하고 싶은 권한 모드 파이프를 이용해 여러개를 동시에 확인할

  • R_OK: 읽기 가능 여부를 확인합니다.
  • W_OK: 쓰기 가능 여부를 확인합니다.
  • X_OK: 실행 가능 여부를 확인합니다.
  • F_OK: 파일의 존재 여부를 확인합니다.
    반환값 : 성공적으로 완료되면 0을 반환 그렇지 않을 시 -1을 반환하고 해당하는 errno를 설정

path파일에 amode에 맞는 권한이 있는지 확인한다
access함수 메뉴얼

dup

<unistd.h>

int dup(int fildes);

fildes : 복사를 하고싶은 file descriptor
반환값 : 성공적으로 복사가 이루어졌을 경우 복사를 해서 새로 만들어진 file descriptor를 반환하고 실패했을 시 -1을 반환하고 해당하는 errno를 설정

매개변수로 받은 file descriptor를 복사하여 새로운 file descriptor를 반환한다
dup/dup2메뉴얼

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로 지정해준다

execve

<unistd.h>

int execve(const char *path, char *const argv[], char *const envp[]);

path : 실행할 프로그램의 path를 입력해준다
argv : 프로그램에 전달할 명령어 인수를 입력해준다 일반적으로 argv[0]에는 실행 프로그램의 path를 입력해준다
envp : 프로그램 시작시 사용할 환경변수를 넣어준다
반환값 : execve함수가 실패했을 시 -1을 반환한다

현재 진행중인 프로세스를 execve함수로 호출한 프로그램으로 변경하여 실행한다exec함수들 메뉴얼

exit

stdlib.h

void exit(int status);

status : 0 또는 EXIT_SUCCESS는 정상종료를 의미하고 EXIT_FAILURE 또는 다른 int값은 오류를 의미합니다

먼저 atexit() 함수에 등록된 모든 함수를 역순으로(즉, 등록된 마지막 함수가 호출되는 첫 번째 함수임) 호출합니다. 프로그램을 종료하기 전에 버퍼를 모두 삭제하고 열린 파일을 모두 닫습니다.
exit함수 메뉴얼

fork

unistd.h

pid_t fork(void);

반환값 : 성공적으로 fork함수가 실행되었을 시 부모 프로세스는 자식프로세스의 PID를 반환하고 자식 프로세스에게는 0을 반환합니다 그렇지 않으면 -1을 반환하고 자식프로세스는 생성되지 않습니다

fork함수는 부모 프로세스를 복사하여 자식프로세스를 하나 만든 후 호출 이후부터 각자의 메모리를 사용하여 실행됩니다

pipe

unistd.h

int pipe(int fildes[2]);

fildes[2] : pipe함수에서 생성할 file descriptor를 두개를 배열로 넣어줍니다

  • fildes[0] : read가 가능한 file descriptor
  • fildes[1] : write가 가능한 file descriptor

반환값 : 성공적으로 pipe함수가 동작했으면 0을 반환하고 오류가 발생했을 시 -1을 반환하며 errno를 설정합니다 이때 fildes는 변하지 않습니다
👀 자식 프로세스든 부모 프로세스든 사용하지 않는 파일디스크립터는 닫아야됩니다 예를 들어 자식프로세스를 읽기용으로 사용한다면 fildes[1]을 close해줘야 됩니다 이는 메모리 관리측면과 쓰기가 끝났다는것을 알려주기 위해 필요한 동작입니다
pipe함수 메뉴얼

<unistd.h>

int unlink(const char *path);

path : 삭제할 파일의 경로
반환값 : unlink함수가 정상 종료되었을경우 0을 반환하고 오류가 발생했을 경우 -1을 반환하고 errno를 설정합니다

삭제할 파일이 심볼릭 링크 파일일 경우 해당 심볼릭 파일만 삭제 시키고 하드 링크 파일일 경우 파일을 삭제하고 하드링크 카운터를 하나 감소시킵니다
unlink함수 메뉴얼

wait

#include <sys/wait.h>

pid_t wait(int *stat_loc);

stat_loc : 자식 프로세스의 상태정보를 저장할 메모리 주소를 매개변수로 받는다
👀 자식 프로세스가 성공적으로 종료되었을 경우

  • 프로세스가 main() 함수에서 0을 반환했을 경우.
  • 프로세스가 _exit() 또는 exit() 함수를 0을 인자로 호출했을 경우.
  • 프로세스가 프로세스의 마지막 스레드가 종료되어 종료되었을 경우.

반환값

  • 자식 프로세스의 상태가 이용 가능한 경우: 자식 프로세스의 프로세스 ID
  • 시그널에 의해 대기가 중단된 경우: -1 (errno가 [EINTR]로 설정됨)
  • 그 외의 오류로 인해 대기가 종료되지 않은 경우: -1 (errno에 오류 코드 설정됨)

wait함수는 호출하는 프로세스의 자식 프로세스 중 하나가 종료가 되거나 시그널이 발생할때 까지 부모프로세스를 정지시킵니다 또한 stat_loc를 이용하여 여러가지 상태정보를 파악할 수 있습니다

  • 자식 프로세스의 종료를 대기: wait() 함수는 자식 프로세스가 종료될 때까지 호출한 프로세스(부모 프로세스)를 대기시킵니다. 자식 프로세스가 종료되면 wait() 함수는 반환됩니다.
  • 종료 상태 확인: wait() 함수는 자식 프로세스가 종료되었을 때 해당 자식 프로세스의 종료 상태 정보를 확인할 수 있습니다. 이를 통해 부모 프로세스는 자식 프로세스가 성공적으로 종료되었는지, 오류로 종료되었는지 등을 판단할 수 있습니다.
  • 자식 프로세스의 종료 상태 반환: wait() 함수의 반환값은 자식 프로세스의 프로세스 ID입니다. 이를 통해 부모 프로세스는 어떤 자식 프로세스의 종료 상태를 확인했는지 식별할 수 있습니다.
  • 자식 프로세스의 리소스 해제: 자식 프로세스가 종료되면 wait() 함수는 자식 프로세스가 사용한 리소스를 해제합니다. 이를 통해 부모 프로세스는 자식 프로세스가 종료됨에 따라 발생하는 리소스 누수를 방지할 수 있습니다.
  • 시그널 처리: wait() 함수가 호출되면 부모 프로세스는 자식 프로세스의 종료를 기다리는 동안 시그널에 의한 중단을 받을 수 있습니다. 이를 통해 시그널 핸들러를 등록하고, 자식 프로세스의 종료 이벤트에 대한 적절한 동작을 수행할 수 있습니다

wait / waitpid함수 메뉴얼

waitpid

#include <sys/wait.h>

pid_t waitpid(pid_t pid, int *stat_loc, int options);

pid : 어떤 자식프로세스 상태를 대기할지 명시해줍니다

  • pid가 -1과 같으면, 어떤 자식 프로세스에 대한 상태를 요청합니다. 이 경우에는 wait()와 동등합니다.
  • pid가 0보다 크면, 상태를 요청하는 단일 자식 프로세스의 프로세스 ID를 지정합니다.
  • pid가 0이면, 호출하는 프로세스와 동일한 프로세스 그룹 ID를 가진 모든 자식 프로세스에 대한 상태를 요청합니다.
  • pid가 -1보다 작으면, 절대값이 pid와 같은 프로세스 그룹 ID를 가진 모든 자식 프로세스에 대한 상태를 요청합니다.

options : 자식 프로세스에 관한 옵션들을 지정할 수 있다

  • WNOHANG: 자식 프로세스의 상태가 이용 가능하지 않더라도 즉시 반환합니다. 즉, 대기 중인 자식 프로세스가 없으면 waitpid() 함수는 바로 0을 반환합니다. 이 옵션을 사용하면 부모 프로세스는 다른 작업을 수행하거나 자식 프로세스의 상태를 주기적으로 확인할 수 있습니다.
  • WUNTRACED: 중지된(stopped) 자식 프로세스의 상태도 확인합니다. WIFSTOPPED() 매크로를 사용하여 확인할 수 있으며, WSTOPSIG() 매크로를 사용하여 중지된 자식 프로세스를 어떤 신호가 중지시켰는지 확인할 수 있습니다.
  • WCONTINUED: 작업 제어 중지에서 계속된 자식 프로세스의 상태도 확인합니다. WIFCONTINUED() 매크로를 사용하여 확인할 수 있습니다.
  • WEXITED: 자식 프로세스의 정상적인 종료 상태만 확인합니다. 이 옵션이 설정되면 WIFEXITED() 매크로를 사용하여 자식 프로세스가 정상적으로 종료되었는지 확인할 수 있습니다.
  • WSTOPPED: 중지된(stopped) 자식 프로세스의 상태만 확인합니다. WIFSTOPPED() 매크로를 사용하여 확인할 수 있으며, WSTOPSIG() 매크로를 사용하여 중지된 자식 프로세스를 어떤 신호가 중지시켰는지 확인할 수 있습니다.

반환값

  • 자식 프로세스의 상태가 이용 가능한 경우: 자식 프로세스의 프로세스 ID
  • 시그널에 의해 대기가 중단된 경우: -1 (errno가 [EINTR]로 설정됨)
  • WNOHANG 옵션과 함께 호출되어 대기 중인 상태가 없는 경우: 0
  • 그 외의 오류로 인해 대기가 종료되지 않은 경우: -1 (errno에 오류 코드 설정됨)

stat_loc관련 함수

  • WIFEXITED(stat_val) : 정상적으로 종료된 자식 프로세스에 대해 상태가 반환된 경우 0이 아닌 값으로 평가됩니다.
  • WEXITSTATUS(stat_val) : WIFEXITED(stat_val)의 값이 0이 아닌 경우 이 매크로는 하위 프로세스가 _exit() 또는 exit()에 전달한 상태 인수의 하위 8비트 또는 하위 프로세스가 기본에서 반환한 값으로 평가됩니다.
  • WIFSIGNALED(stat_val) : 포착되지 않은 신호 수신으로 인해 종료된 자식 프로세스에 대해 상태가 반환된 경우 0이 아닌 값으로 평가됩니다(<signal.h> 참조).
  • WTERMSIG(stat_val) : WIFSIGNALED(stat_val)의 값이 0이 아닌 경우 이 매크로는 자식 프로세스를 종료시킨 신호의 번호로 평가됩니다.
  • WIFSTOPPED(stat_val) : 현재 중지된 자식 프로세스에 대해 상태가 반환된 경우 0이 아닌 값으로 평가됩니다.
  • WSTOPSIG(stat_val) : WIFSTOPPED(stat_val)의 값이 0이 아닌 경우 이 매크로는 하위 프로세스를 중지시킨 신호의 번호로 평가됩니다.
  • WIFCONTINUED(stat_val) : 작업 제어 중지에서 계속된 자식 프로세스에 대해 상태가 반환된 경우 0이 아닌 값으로 평가됩니다.
profile
프로그래머 희망자(휴직중)

0개의 댓글