본문 바로가기

개발/리눅스 프로그래밍

유닉스 파일 시스템2

출처 : 아주대학교 시스템 소프트웨어 보안 강의자료

/*
* 공부한거 정리하는거라 틀린게 있을 수도 있어요...
* 내용에 틀린게 있으면 알려주세요!!
*/

  이전 포스팅에서 시스템 파일 테이블에는 file sharing이 가능하다고 언급했다. 2개의 프로세스에서 같은 파일을 열면 파일 테이블에는 2개의 엔트리가 생성되고 이 두 엔트리는 하나의 아이노드를 참조한다는 내용이다. 하지만 이 구조가 달라지는 경우가 있는데 fork()와 dup()를 사용한 경우이다.

  fork() 함수는 프로세스를 복사하는 함수이다. 이 때 파일 디스크립터 테이블과 그 내용도 함께 복사한다. 그래서 두 프로세스는 하나의 시스템 파일 엔트리를 참조한다.

  dub()는 파일 디스크립터 엔트리를 복사한다. 때문에 파일 디스크립터는 다르지만 내용은 같기 때문에 같은 시스템 파일 엔트리를 참조하게 된다. 아래는 이를 나타낸 그림과 두 함수에 대한 설명이다.

fork()함수를 사용했을 때 파일 참조

 

dup()함수를 사용했을 때 파일 참조

 

파일 원형 pid_t fork(void)
헤더 unistd.h
반환 자식 프로세스는 0, 부모 프로세스는 자식 프로세스의 pid
예제 https://github.com/jaduwvad/SystemSoftwareSecurity/blob/master/process/pid.c

 

파일 원형 int dup(int filedes)
헤더 unistd.h
반환 복사본을 저장한 파일 디스크립터 위치
인수 설명 int filedes : 복사할 파일 디스크립터 값