출처 : 아주대학교 시스템 소프트웨어 보안 강의자료
/*
* 공부한거 정리하는거라 틀린게 있을 수도 있어요...
* 내용에 틀린게 있으면 알려주세요!!
*/
이전 포스팅에서 시스템 파일 테이블에는 file sharing이 가능하다고 언급했다. 2개의 프로세스에서 같은 파일을 열면 파일 테이블에는 2개의 엔트리가 생성되고 이 두 엔트리는 하나의 아이노드를 참조한다는 내용이다. 하지만 이 구조가 달라지는 경우가 있는데 fork()와 dup()를 사용한 경우이다.
fork() 함수는 프로세스를 복사하는 함수이다. 이 때 파일 디스크립터 테이블과 그 내용도 함께 복사한다. 그래서 두 프로세스는 하나의 시스템 파일 엔트리를 참조한다.
dub()는 파일 디스크립터 엔트리를 복사한다. 때문에 파일 디스크립터는 다르지만 내용은 같기 때문에 같은 시스템 파일 엔트리를 참조하게 된다. 아래는 이를 나타낸 그림과 두 함수에 대한 설명이다.
파일 원형 | 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 : 복사할 파일 디스크립터 값 |
'개발 > 리눅스 프로그래밍' 카테고리의 다른 글
localtime() 사용 시 유의사항 (0) | 2020.01.12 |
---|---|
mariadb-connector 라이브러리 내부 버그 (0) | 2020.01.07 |
좀비 프로세스 방지 (0) | 2019.07.18 |
유닉스 파일 함수 정리 (0) | 2019.07.18 |
유닉스 파일 시스템 (0) | 2019.07.17 |