[pipex] 허용 함수 목록 - 2

woonchoi·2022년 2월 3일
0

42Cursus

목록 보기
3/9

pipe

의존성

#include <unistd.h>

함수 원형

int pipe(int fildes[2]);
  • 프로세스 간의 통신을 위한 파일 디스크립터 쌍을 생성하는 함수
  • fildes[2] : 파일 디스크립터 배열
    • fildes[0]: 파이프 출구 (read)
    • fildes[1]: 파이프 입구 (write)
  • return
    • 성공 : 0
    • 실패 : -1

테스트 코드

실행 결과


dup2

의존성

#include <unistd.h>

함수 원형

int dup2(int fildes, int fildes2);
  • 존재하는 두 개의 파일 디스크립터를 복제하는 함수
  • fildes : 파일 디스크립터 (원본)
  • fildes2: 파일 디스트립터 (복제)
  • return
    • 성공 : 새로운 파일 디스크립터
    • 실패 : -1

테스트 코드 - 1

실행 결과 - 1

테스트 코드 - 2

실행 결과 - 2

appendix

STDIN_FILENO : 0
STDOUT_FILENO : 1


execve

의존성

#include <unistd.h>

함수 원형

int execve(const char *path, char *const argv[], char *const envp[]);
  • 파일을 실행하는 함수
  • *path : 파일의 경로를 포함한 이름
  • argv[] : 인수 목록
  • envp[] : 환경 변수 리스트
  • return
    • 실패 : -1

테스트 코드 (envp)

프로그램을 실행하기 위해서는 해당 프로그램이 있는 경로를 알아야 한다. 따라서 해당 프로그램의 위치를 찾기 위해 main함수의 인자로 받아온 envp를 적절히 파싱한 뒤, 이를 이용해 명령어를 실행한다.

경로의 구조에 대해서 알아보기 위해 이를 확인하기 위한 테스트 코드를 만들었다.

실행 결과

여기서 PATH와 관련된 부분을 자세히 보면 :로 경로들이 구분되어 있는 것을 알 수 있다.
경로를 읽기 편하도록 :를 기준으로 개행 처리를 하면 아래와 같다.

PATH=/home/woonchoi/.vscode-server/bin/899d46d82c4c95423fb7e10e68eba52050e30ba3/bin
/home/woonchoi/.local/bin
/home/woonchoi/.cargo/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/mnt/c/Program Files (x86)/Razer/ChromaBroadcast/bin
/mnt/c/Program Files/Razer/ChromaBroadcast/bin
/mnt/c/Program Files (x86)/Razer Chroma SDK/bin
/mnt/c/Program Files/Razer Chroma SDK/bin
/mnt/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/bin
/mnt/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/libnvvp
/mnt/c/Program Files/Common Files/Oracle/Java/javapath
/mnt/c/WINDOWS/system32
/mnt/c/WINDOWS
/mnt/c/WINDOWS/System32/Wbem
/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/
/mnt/c/WINDOWS/System32/OpenSSH/
/mnt/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common
/mnt/c/Program Files/NVIDIA Corporation/NVIDIA NvDLISR
/mnt/c/Program Files/NVIDIA Corporation/Nsight Compute 2019.4.0/
/mnt/c/Users/Stdio/AppData/Local/Microsoft/WindowsApps
/mnt/c/Users/Stdio/AppData/Local/Programs/Microsoft VS Code/bin
/mnt/c/Program Files/Bandizip/
/mnt/c/WINDOWS/system32/config/systemprofile/AppData/Local/Microsoft/WindowsApps
/mnt/c/Users/Stdio/AppData/Local/Microsoft/WindowsApps
/mnt/c/Users/Stdio/AppData/Local/Programs/Microsoft VS Code/bin
/mnt/c/Program Files/Bandizip/
/snap/bin

이번 과제에서는 이 경로들을 하나씩 탐색하며 파일을 실행해보는 코드를 작성해야만 한다.


fork

의존성

#include <unistd.h>

함수 원형

pid_t	fork(void);
  • 새로운 자식 프로세스를 만드는 함수
  • return
    • 성공 : pid
    • 실패 : -1

간단히 설명하자면 fork가 실행된 시점에 프로세스는 부모 프로세스와 자식 프로세스로 분기된다.

이 때, 기존의 프로세스가 가지고 있던 데이터들이 그대로 복사되어 부모 프로세스와 자식 프로세스 모두 같은 변수값들을 가지게 되는데 아직 동작방식을 자세히는 모르겠다.

이 함수는 pipex를 구현하면서 시험해 볼 예정이다.

profile
개발공부

0개의 댓글