시프 패캠 정리

강준호·2024년 6월 1일

시스템프로그래밍

목록 보기
18/18

파일 디스크립터와 파일 포인터

파일 디스크립터(파일을 구분하기 위해)

  • 소켓 , IPC 도 파일로 간주함.
  • 파일을 식별하기 위해 운영체제로부터 할당받은 '정보'
  • 저수준에서 파일을 식별하는 정보

open

  • 인자: (파일경로, flag: 접근플래그, mode: 파일 생성모드 (권한))
  • 성공시 fd return
  • 실패시 -1

close

  • 성공시 0
  • 실패시 -1

파일 포인터

  • FILE * 타입
  • 파일을 스트림처럼 읽고 쓰기 위한 자료형
  • 고수준에서 파일을 식별하는 정보

fopen

  • 인자로 파일경로와 모드 입력받음

  • 성공시 파일포인터

  • 실패시 NULL

fclose

  • 인자로서 파일 포인터를 받음

  • 성공시 0

  • 실패시 EOF

파일 디스크립터에서 파일 포인터 반환받기

fdopen

  • fd: 파일 디스크립터

  • 성공시: 파일 포인터

  • 실패시 NULL

파일 포인터에서 파일 디스크립터 반환받기

fileno

  • stream : 파일 포인터

  • 성공시: 파일디스크립터

  • 실패시 -1

파일 입력(식별한 파일을 어떻게 읽는지)

fscanf

  • stream: 파일포인터, format: 입력포맷

  • 성공시 입력받은 item 개수

  • 실패시 EOF

fgetc (문자 하나 읽기)

  • 성공시 읽은 문자
  • 실패시 EOF

fgets(문자열 읽기)

  • s: 문자열 버퍼, size: 버퍼 크기, stream: 파일 포인터

  • 성공시 문자열을 가르키는 포인터

  • 실패시 NULL

fread

  • 바이너리 데이터를 스트림으로 읽을때
  • 반환: 입력된 아이템의 개수

파일 출력

write

fprintf

fputc(문자/문자열 쓰기)

fputs

fwrite

ftell

fseek(커서 옮기기)

디렉터리 생성하기

mkdir

readdir

  • dirp 를 인자로

하드링크와 심볼릭 링크

아이노드

  • 파일에 대한 모든것을 가지고 있는 색인 블럭

  • 생겨난 근본적인 이유?🤔 => 외부단편화!

  • 아이노드라는 색인 블록을 활용해 연속적으로 블록에 저장해 외부단편화 해결할 수 있음!

하드링크

  • 하드링크 생성시 같은 아이노드를 공유하는 하드 링크 파일이 생성됨.

  • 하드링크와 원본 파일은 같음

  • 아이노드도 같고, 데이터의 실질 위치, 값도 같거든.

  • 여러 이름으로 파일을 참조하고 싶을때 사용

심볼릭 링크(= 윈도우 바로가기)

  • 원본파일의 포인터

  • 원본파일과 같은 데이터를 공유하지 않음.

  • 원본파일이 삭제/이동하면 심볼릭 링크도 사용불가.

  • 복사된 경로에 있는 파일을 참조하고자 할 때

파일 속성 다루기

stat

파일 메모리 매핑(중요)

mmap(메모리 매핑을 위한 시스템 콜)

  • 명시적 파일 뿐만아니라 명시적 매핑이 아니라 다 가능
  • 성공시 매핑된 주소
  • 실패시 MAP_FAILED

addr

  • addr: 프로세스 메모리 공간 중 어디에 매핑하고 싶은지 정하고 싶어서.힌트일뿐. 대부분 NULL을 줌

length & offsets (매핑된 범위설정)

  • length: 얼마나 떨어져있는지 , offsset :매핑을 시작할 위치

prot: 메모리 보호모드(읽기, 쓰기 모드)

flag: 매핑 형태와 동작방식

  • SHARED 매핑을 하면 원본에 작업을 한다는것. -> IPC(프로세스간의 통신) -> 임계구역과 동기화를 염두해둬야함.

  • 대부분 NULL 주긴함.

Anonymous Mapping(존재X 파일도 매핑 가능)

  • 실제 파일이 아니더라도, 내 파일인것처럼 파일을 공유해서 변수에 접근 가능 => 프로세스간의 통신!
  • 특정 파일 지정 X
  • flags = MAP_

munmap(매모리 unMap)

파일 메모리 매핑이란?

  • 프로세스 메모리 영역에 파일 내용 일부에 대응시키는것

  • 디스크에 있는 파일에 읽고 쓰는것이 아니라 '프로세스 메모리 영역' 에 읽고 쓰기

  • 두개 이상의 프로세스가 같은 영역을 매핑할 경우 다른 프로세스와의 통신가능!

  • 매핑은 페이지의 배수의 크기로 이루어짐


프로세스와 스레드 다루기

프로세스 다루기

좀비프로세스

wait

  • 자식 프로세스가 종료될 때까지 대기하기 (회수)

스레드 다루기

자원공유

  • 멀티 스레드 환경에서는 자원을 공유하기때문에 race condition 이 발생할 가능성이 높아짐

스레드 조인

  • 스레드 실행이 종료될때까지 대기

스레드 떼어내기

  • 종료시 자동으로 자원 해제 -> 조인 따로 할 필요 없음.

mutex

semaphore

unnamed semaphore

  • sem_destory

named semaphore

  • 이름이 있는 세마포이기 때문에 이름을 지정해줘야함.

sem_post

  • 세마포어 해제
  • semaphore value 1증가,

공유 메모리 기반 IPC

  • 넓은 관점에서는 mmap을 이용한 파일 매핑도 공유 메모리 기반 IPC 임.

공유메모리

  • 다수의 프로세스가 공유 가능한 메모리 영역
  • 공유하는 메모리를 읽고 씀으로서 프로세스간 통신이 가능

1. 공유메모리 생성/열기(shm_open)

  • 인자에 공유메모리 이름
  • 성공시 공유메모리 descriptor
  • 실패시 -1

2. mmap

3. munmap

  • 인자에 공유메모리 이름

파이프 기반 IPC

  • 파일 입출력과 거의 동일
    -파이프는 단방향 IPC 도구
  • 한쪽에서는 읽고 한쪽에서는 쓴다.
  • 주로 Stream 형태 데이터를 주고받을때 사용

생성 (pipe)

  • 성공시 0
  • 실패시 -1

파일기반의 read/write/open 과 동일

named pipe(파일 입출력 느낌)

  • 이름==파일
  • 파이프의 ID 를 알면 통신에 참여할 수 있다.
  • 파이프 open 시 읽기 축과 쓰기 축이 동시 개방해야한다.

0개의 댓글