[42Seoul/minishell] 사용 가능한 외부 함수 (3)

yebeen·2022년 8월 10일
0

42-Seoul/minishell

목록 보기
4/9
post-thumbnail
사용 가능한 외부 함수
readline, rl_on_new_line, rl_replace_line, rl_redisplay, add_history, printf, malloc, free, write, open, read, close, pipe, fork, wait, waitpid, wait3, wait4, unlink, execve, dup, dup2, exit, signal, kill, getcwd, chdir, stat, lstat, fstat, opendir, readdir, closedir, strerror, errno, isatty, ttyname, ttyslot, ioctl, getenv, tcsetattr, tcgetattr, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs

하드 링크를 끊는데 이용합니다. 하드 링크의 이름을 삭제하면 inode를 참조하고 있는 하나의 하드 링크를 끊어 링크의 개수를 하나 줄입니다. path에 명시된 하드 링크는 삭제가 되지만 해당 inode를 참조하고 있는 모든 하드 링크가 지워지는 것은 아니기 때문에 그 파일의 하드 링크가 여러 개라면 여전히 그 파일은 존재하게 됩니다.

#include <unistd.h>

int unlink(const char *path);

정상적으로 하드 링크를 끊으면 0을 그렇지 않으면 -1을 반환합니다.

하드 링크의 참조 개수가 0이 되면 실제 파일의 내용이 저장되어 있는 disk spacefree() 하여 OS가 다른 파일을 위해서 사용할 수 있도록 합니다.

  • `open`으로 파일이 열린 상태에서 `unlink`를 호출하여 참조 개수가 0이 되어도 파일 이름 등의 정보는 삭제되지만 `disk space`는 해제되지 않음

execve()

#include <unistd.h>

int execve(const char *file, char * const *argv, char * const *envp);

인자로 받은 파일에 대해서 실행하고 정상 동작할 경우 0을 문제가 발생할 경우 -1을 반환합니다.

int execl(const char *path, const char *arg0, ..., const char *argn, (char *)0);
int execv(const char *path, char *const argv[]);
int execle(const char *path, const char *arg0, ..., const char *argn, (char *)0, char *const envp[]);
int execve(const char *path, char *const argv[], char *const envp[]);
int execlp(const char *file, const char *arg0, ... const char *argn, (char *)0);
int execv(const char *file, char *const argv[]);
  • path
    PATH의 환경에 등록된 디렉터리의 파일들을 실행하기 때문에 명령어를 전체 경로가 아닌 명령어만 인자 값으로 넘겨도 됩니다.
  • envp
    envp환경변수에 등록된 모든 디렉터리의 파일들을 실행하기 때문에 전체 경로를 인자 값으로 넘겨야 됩니다.

dup()

fd라는 파일 디스크립터를 인자로 사용합니다.

#include <unistd.h>

int dub(int fd);

정상적으로 복제될 경우 파일 디스크립터의 값을, 그렇지 않을 경우 -1을 반환합니다.


dup2()

dup2dup과 동작 방식은 동일합니다. 반환 값이 사용자가 사용하는 fd2라는 값이 나올 수 있도록 fd라는 인자를 사용하여 복제를 수행합니다.

#include <unistd.h>

int dup2(int fd, int fd2);

함수의 결과는 fd2fd가 가리키는 파일 디스크립터를 가리키게 됩니다. 문제가 발생하면 -1을 반환합니다.


exit()

프로세스 내 파일 입출력 중인 것을 저장하며 프로세스를 종료합니다.

#include <stdlib.h>

정상 종료되면 0(EXIT_SUCCESS)을 1(EXIT_FAILURE)은 에러 메시지 종료입니다.


profile
🐣🐥

0개의 댓글