Minishell 사용가능한 외부 함수 정리

yjoo·2022년 9월 5일
0

42

목록 보기
1/1

MINISHELL

사용가능한 외부 함수

readline

  • 함수 원형
#include <readline/readline.h>
#include <readline/history.h>

char *readline (const char *prompt);
  • 용도
    + readline은 char *prompt를 터미널에 띄워주고 터미널에서 입력된 문자열을 리턴함
    + CTRL + D 를 입력해도 EOF로 인식됨 Editing 방식에 따른 Key Binding을 지원하기 때문
  • 매개변수
    + 출력할 문자열
  • 리턴 값
    + 읽어들인 문자열을 리턴함(개행은 제거됨)
    + 빈 문자열이라면 빈 문자열을 리턴함
    + 값을 읽어내지 못하면 NULL을 리턴함(EOF)
    + 리턴 값은 동적할당 된 것이므로 free()가 필요함(gnl과 비슷)
  • 예제
    + https://wtg-study.tistory.com/103

rl_on_new_line

  • 함수원형
#include <readline/readline.h>
#include <readline/history.h>

int rl_on_new_line(void)
  • 용도
    + readline 함수에 프롬프트가 개행문자를 만났다고 알려줌(알림 용도)
    + 보통 개행을 출력 한 후, 시그널을 처리할 때 사용함
    + 주로 rl_replace_line 및 rl_redisplay와 같이 사용함.
  • 리턴 값
    + 아무 문제 없이 정상 수행되었다면 0 에러는 -1을 리턴함

rl_replace_line

  • 함수원형
#include <readline/readline.h>
#include <readline/history.h>

void rl_replace_line (const char *text, int clear_undo)
  • 용도
    + 사용자가 쉘에 입력한 명령어는 rl_line_buffer라는 전역변수에 저장되는데 해당 문자열을 수정시 사용
    + editing기능을 지원하기에 undo_list에 명령어들을 저장하고 있는데 Undo를 사용하기 위함이다
  • 매개변수
    + rl_line_buffer에 대치될 문자열 text
    + undo_list를 초기화할지 그대로 유지할지에 대한 옵션 0은 리스트를 유지하고 그 외의 int는 초기화시킴

rl_redisplay

  • 함수원형
#include <readline/readline.h>
#include <readline/history.h>

void rl_redisplay (void)
  • 용도
    + rl_replace_line 함수를 선행으로 사용하였을때 대치된 명령어를 출력함char *text

add_history

  • 함수원형
#include <readline/readline.h>
#include <readline/history.h>

void add_history (char *string)
  • 용도
    + char *string를 히스토리 목록에 넣음.
    + 프롬프트가 열린 상태에서 키보드 위 아래 방향키로 문자열을 불러올 수 있다.

fork

  • 함수원형
#include <unistd.h>

pid_t fork(void);
  • 용도
    + 호출한 프로세스를 복제한 자식 프로세스를 만듬
    + 호출되기 이전까지의 메모리 영역을 그대로 사용하며 호출 이후 시점부터 부모 프로세스와 별개로 실행됨
  • 리턴 값
    + 성공시 부모 프로세스에는 자식의 PID를, 실패시 부모 프로세스에게 -1을 리턴함

wait

  • 함수원형
#include <sys/wait.h>

pid_t wait(int *wstatus);
  • 용도
    + 자식 프로세스가 종료되는걸 대기하고 자식 프로세스의 자원을 반환함
    + return, exit로 정상종료시 값을 반환한다.
  • 매개변수
    + wstatus에 리턴 값이 저장되며 시그널로 인한 종료일경우 시그널 번호가 저장됨
  • 리턴 값
    + 정상종료시 자식 프로세스의 pid를 리턴, 실패시 -1을 리턴함

waitpid

  • 함수원형
#include <sys/wait.h>

pid_t waitpid(pid_t pid, int *wstatus, int options);
  • 용도
    + 기본적으로 wait과 같은 동작을 수행하나, 옵션을 통해 자식 프로세스의 상태 변경을 기다림
  • 매개변수
    + pid
    + pid < -1 : pid의 절댓값과 같은 자식 프로세스를 기다림
    + pid == -1 : 임의의 자식 프로세스를 기다림
    + pid > 0 : 프로세스 ID가 pid인 자식 프로세스를 기다림
    + pid == 0 : waitpid를 호출한 프로세스와 동일한 그룹ID를 가진 자식 프로세스를 대상으로 함
    + wstatus
    + 위의 매개변수와 동일 자식 프로세스의 리턴 값을 저장함
    + option
    + WNOHANG : 종료된 자식 프로세스가 없다면 리턴
    + WUNTRACED : 자식 프로세스가 멈추면 리턴
    + WCONTINUED : 멈췄던 자식 프로세스가 재개되었을때 리턴
  • 리턴 값
    + 정상 종료시 변경된 자식 프로세스의 pid를 리턴함
    + WNOHANG옵션 사용시 자식 프로세스가 상태 변경이 안되었다면 0, 실패시 -1

wait3, wait4

  • 함수원형
#include <sys/types.h>
#include <sys/wait.h>

pid_t wait3(int *status, int options, struct rusage *rus);

pid_t wait4(pid_t pid, int *status, int options, struct rusage *rus);
  • 용도
    + 사용자의 시간 정보를 확인하는 함수
  • 매개변수
    + status, options, pid는 위와 동일
    + rusage는 자식 프로세스의 리소스 사용량에 대한 정보가 담긴다.
  • 리턴 값
    + 정상 종료시 변경된 자식 프로세스의 pid를 리턴함
    + WNOHANG옵션 사용시 자식 프로세스가 상태 변경이 안되었다면 0, 실패시 -1

signal

  • 함수원형
#include <signal.h>

void (*signal(int signum, void (*handler)(int)))(int);
  • 용도
    + 시그널 발생시 핸들링을 설정함.
  • 매개변수
    + signum : 해당 번호의 시그널이 발생할경우
    + void (*handler) : 해당 함수 포인터로 핸들링.
  • 리턴 값
    + 성공 시 이전에 설정된 시그널 핸들러를 리턴

kill

  • 함수원형
#include <signal.h>

int kill(pid_t pid, int signo);
  • 용도
    + 프로세스에 시그널을 보냄.
  • 매개변수
    + 입력된 pid를 가진 프로세스에 signo 시그널넘버를 보내 신호를 보냄
  • 리턴 값
    + 0은 성공, -1은 실패

getcwd

  • 함수원형
#include <unistd.h>

char *getcwd(char *buf, size_t size);
  • 용도
    현재 작업폴더의 절대경로를 size만큼 buf에 복사함
  • 매개변수
    + buf 절대경로가 복사될 버퍼
    + size 복사할 길이
  • 리턴 값
    성공 시 현재 작업폴더의 절대경로를 리턴함.(buf와 동일)

chdir

  • 함수원형
#include <unistd.h>

int chdir(const char *path);
  • 용도
    + 호출 프로세스의 작업 경로를 변경함
  • 매개변수
    + path 변경될 작업경로
  • 리턴 값
    + 성공 시 0, 실패 시 -1

stat

  • 함수원형
#include <sys/stat.h>

int stat(const char * path, struct stat *buf);
  • 용도
    +
  • 매개변수

0개의 댓글