semaphore (세마포어)

|
open시에 O_EXCL플래그를 사용하면 파일을 원자적으로 접근할수 있다.
open시에 사용되는 플래그들
O_RDONLY : 읽기전용 엑세스를 위해 파일을 연다
O_WRONLY: 쓰기전용 엑세스를 위해 파일을 연다
O_RDWR: 읽기와 쓰기 전용엑세스를 위해 파일을 연다
O_CREATE: 파일이 존재하지 않으면 생성한다
O_EXCL: 파일이 이미 존재하면 실패한다
O_NOCTTY: 열고자 하는 tty와 프로세스가 제어하는 tty를 가지지 않았다면 즉 같은 제어권이 없으면 제어하는 tty
                  가 되지 못한다
O_TRUNC: 파일이 존재하면 길이를 0으로 줄인다
O_APPEND: 현재 파일의 포인터를 파일의 마지막에 위치하게 한다
O_NONBLOCK: 프로세스가 지연없이 완료되지 않으면 완료되기 전에 반환한다
O_NODELAY: O_NONBLOCK과 같다
O_SYNC: 기록이 완료되는 경우 반환
O_DIRECTORY: 디렉토리가 아니면 open함수는 실패된다
O_LARGEFILE: 32-bit 시스템의 매우 큰파일형태


세마포어
대기를 위한 P(세마포어 변수) : critical section들어갈때 호출
신호를 위한 V(세마포어 변수) : critical section에서 나갈때 호출

함수정의
#include <sys/sem.h>
#include <sys/types.h>
#include <sys/ipc.h>
int semctl (int sem_id, int sem_num, int command, ...);
int semget (key_t key, int num_sems, int sem_flags);
int semop (int sem_id, struct sembuf *sem_ops, size_t num_sem_ops);


1. setmget
    sem_flags : open함수의 플래그와 같고 추가로 IPC_CREATE, IPC_EXCL를 함께사용가능
And