Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 이노베이션아카데미
- 스타트업
- 파이썬
- 레이캐스팅
- 42seoul
- 창업
- GraphQL
- uuid-ossp
- 텍스트북
- mistel키보드
- SFINAE
- 부동소수점
- 자료구조
- schema first
- raycasting
- 어셈블리
- 42서울
- 어셈블리어
- c++
- 도커
- enable_if
- 프라이빗클라우드
- Cloud Spanner
- 엣지컴퓨팅
- 정렬
- adminbro
- psql extension
- 쿠버네티스
- 동료학습
- 스플릿키보드
Archives
- Today
- Total
written by yechoi
[C] sem_open 이란? (인자, 이름 '/' 유무 차이 등) 본문
반응형
선언
sem_t * sem_open( const char * sem_name,
int oflags,
... );
인자
sem_name
생성 또는 접근하고자 하는 세마포어의 이름
oflags
세마포어 생성시 플래그. 아래 두가지 조합으로 사용 가능:
- O_CREAT
- O_EXCL
!! O_RDONLY, O_RDWR, O_WRONLY 플래그는 undefined behavior를 일으킴. QNX 라이브러리는 이러한 플래그를 무시하긴 하지만 이들은 코드의 휴대성을 저하함
mode_t mode
플래그를 O_CREAT로 설정하면, mode
인자를 받을 수 있음. <sys/stat.h>
를 인클루드 하면 아래 상수들을 활용할 수 있다.
- S_IRWXR : 그룹 접근
- S_IRWXO : 타인 접근
- S_IRWXU : 개인 접근
unsigned int value
세마포어 초기 값으로 0 보다 큰 양수여야 함. unlock된 세마포어의 수를 의미한다. 이 값은 SEM_VALUE_MAX를 초과할 수 없다.
설명
sem_open()
은 이름 있는 세마포어를 생성하거나 접근하게끔 한다. 이름 있는 세마포어는 sem_init()
으로 생성되는 무명 세마포어보다 느리다. 세마포어는 시스템이 살아있기만 하면 계속 존재한다.
sem_open()
은 세마포어 디스크립터를 반환하는데, 이는 sem_wait()
, sem_trywait()
, sem_post()
를 활용하는 데 사용할 수 있다. 디스크립터는 sem_close()
를 호출할 때까지 사용가능하다. 세마포어를 언링크하려면 sem_unlink()
를 호출하면 된다. 모든 프로세스가 세마포어를 언링크하면, 세마포어는 파괴된다.
이름 있는 세마포어는 항상 /dev/sem
경로에 생성된다:
- 이름이 /로 시작하면 세마포어는 그 이름으로 지어진다.
- 이름이 /로 시작하지 않으면, 세마포어는 그 이름으로 지어지되 현재 경로 아래에 만들어진다.
예를 들어 만약 현재 디렉토리가 /tmp
라면:
name | pathname space entry |
---|---|
/my_sem | /dev/sem/my_sem |
My_sem | /dev/sem/tmp/my_sem |
반응형