이 름
semop − 세 마 포 어 조 작 .
사 용 법
# include
<sys/types.h>
# include <sys/ipc.h>
# include <sys/sem.h>
int semop ( int semid, struct sembuf *sops, unsigned nsops )
설 명
이 함 수 는 semid 가 지 시 하 는 세 마 포 어 집 합 중 선 택 된 멤 버 들 에 대 하 여 연 산 을 수 행 한 다 . sops 가 가 리 키 는 nsops 개 의 원 소 를 갖 는 배 열 의 각 원 소 는 다 음 과 같 은 struct sembuf 이 며 , 세 마 포 어 에 수 행 될 연 산 을 지 정 한 다 .
short
sem_num; /* semaphore number: 0 = first */
short sem_op; /* semaphore operation */
short sem_flg; /* operation flags */
sem_flg 플 래 그 는 IPC_NOWAIT 혹 은 SEM_UNDO 이 다 . 만 일 플 래 그 가 SEM_UNDO 로 지 정 되 어 있 으 면 , 프 로 세 스 가 종 료 할 때 세 마 포 어 를 원 래 대 로 되 돌 려 놓 을 것 이 다 .
시 스 템 호 출 시 맨 틱 은 오 직 모 든 프 로 세 스 가 성 공 할 때 만 연 산 들 이 수 행 될 것 을 보 장 한 다 . 세 트 중 첫 번 째 세 마 포 어 가 0인 곳 에 서 연 산 들 이 수 행 될 것 이 고 다 음 의 세 가 지 중 하 나 이 다 라 는 것 을 보 증 한 다 . Each operation is performed on the 각 연 산 은 세 마 포 어 세 트 의 sem_num−th 세 마 포 어 상 (세 트 중 첫 번 째 세 마 포 어 가 0인 곳 에 서 )에 서 수 행 되 고 , 다 음 의 세 가 지 중 하 나 이 다 .
만 일 sem_op 가 양 수 라 면 , 연 산 은 이 값 을 semval 으 로 추 가 시 킨 다 . 더 욱 이 , 만 일 SEM_UNDO 가 이 연 산 에 대 해 주 장 된 다 면 , 시 스 템 은 이 세 마 포 어 에 대 한 프 로 세 스 undo 카 운 트 를 업 데 이 트 한 다 . 연 산 은 계 속 적 으 로 실 행 되 고 , 따 라 서 유 휴 하 는 프 로 세 스 는 발 생 하 지 않 는 다 . 호 출 프 로 세 스 는 세 마 포 어 세 트 에 대 해 변 경 권 한 들 을 갖 고 있 어 야 한 다 .
만 일 sem_op 이 zero이 면 , 프 로 세 스 는 세 마 포 어 세 트 에 대 한 읽 기 접 근 권 한 들 을 갖 고 있 어 야 한 다 . 만 일 semval 이 제 로 라 면 , 연 산 은 실 행 된 다 . 그 렇 지 않 으 면 , 만 일 IPC_NOWAIT 이 sem_flg 내 에 서 주 장 되 면 , EAGAIN 으 로 설 정 된 errno 에 의 해 실 패 한 다 . 그 렇 지 않 으 면 , semzcnt 은 하 나 씩 증 가 하 고 , 프 로 세 스 는 다 음 중 하 나 가 일 어 나 기 전 까 지 유 휴 에 든 다 .
• |
semval 은 semzcnt 의 값 이 감 소 하 는 때 에 0이 된 다 . | ||
• |
세 마 포 어 세 트 는 삭 제 된 다 . 시 스 템 호 출 은 EIDRM 으 로 설 정 된 errno 에 의 해 실 패 한 다 . | ||
• |
호 출 프 로 세 스 는 감 지 되 어 야 하 는 세 마 포 어 을 수 신 한 다 . semzcnt |
값 은 감 소 되 고 , 시 스 템 호 출 은 EINTR 로 설 정 된 errno 에 의 해 실 패 한 다 .
만 일 sem_op 이 0보 다 낮 다 면 , 프 로 세 스 는 세 마 포 어 세 트 에 대 한 변 경 권 한 들 을 갖 고 있 어 야 한 다 . 만 일 semval 이 sem_op 의 절 대 값 보 다 높 거 나 동 일 하 다 면 , sem_op 의 절 대 값 은 semval 에 의 해 감 소 된 다 . 더 우 기 , 만 일 SEM_UNDO 이 이 연 산 에 대 해 단 언 된 다 면 , 시 스 템 은 이 세 마 포 어 에 대 한 프 로 세 스 undo 카 운 트 를 업 데 이 트 한 다 . 그 리 고 나 서 , 연 산 은 계 속 된 다 . 그 렇 지 않 고 , 만 일 Otherwise, if IPC_NOWAIT 이 sem_flg 내 에 서 단 언 된 다 면 , 시 스 템 호 출 은 EAGAIN 로 설 정 된 errno 에 의 해 실 패 한 다 .(수 행 된 이 전 의 액 션 들 을 취 소 함 으 로 서 ) 그 렇 지 않 으 면 , Otherwise semncnt 는 하 나 에 의 해 증 가 되 고 , 프 로 세 스 는 다 음 중 하 나 가 발 생 하 기 전 까 지 유 휴 한 다 .
• |
semval 는 sem_op 의 절 대 값 보 다 동 일 하 거 나 더 높 아 진 다 . semncnt |
값 이 감 소 될 때 , .B sem_op의 절 대 값 은 semval에 서 감 해 진 다 . 그 리 고 SEM_UNDO 이 이 연 산 에 대 해 주 장 되 면 , 시 스 템 은 세 마 포 어 에 대 한 프 로 세 스 undo 카 운 트 를 업 데 이 트 한 다 .
• |
세 마 포 어 세 트 는 시 스 템 에 서 삭 제 된 다 . 시 스 템 호 출 은 EIDRM 으 로 설 정 된 errno에 의 해 실 패 한 다 . | ||
• |
호 출 프 로 세 스 는 감 지 되 어 야 한 는 세 마 포 어 을 수 신 한 다 . semncnt 의 값 은 감 소 되 고 , 시 스 템 호 출 은 EINTR 으 로 설 정 된 errno 에 의 해 실 패 한 다 . |
In case of success, the 성 공 할 경 우 , sops 에 의 해 지 시 된 배 열 내 에 명 시 된 개 별 세 마 포 어 에 대 한 구 조 sem 의 sempid 멤 버 는 호 출 프 로 세 스 의 process−ID 로 설 정 된 다 . 더 욱 이 , sem_otime 와 sem_ctime 모 두 현 재 시 간 으 로 설 정 된 다 .
반 환 값
시 스 템 호 출 이 성 공 적 이 면 0 을 반 환 하 고 그 렇 지 않 으 면 , 에 러 를 가 리 키 는 errno 와 −1 을 반 환 한 다 .
에 러
실 패 했 을 때 , errno 는 다 음 중 하 나 를 갖 는 다 .
E2BIG |
인 수 nsops 는 시 스 템 호 출 한 개 에 허 용 된 연 산 의 갯 수 인 SEMOPM 를 넘 는 다 . | ||
EACCES |
프 로 세 스 가 호 출 한 연 산 들 이 요 구 하 는 세 마 포 어 집 합 에 대 한 접 근 권 한 을 갖 고 있 지 않 다 . | ||
EAGAIN |
sem_flg 가 IPC_NOWAIT 이 었 고 , 연 산 이 즉 시 실 행 될 수 없 었 거 나 , timeout 으 로 지 정 된 시 간 제 한 을 넘 어 서 까 지 실 행 되 지 않 았 다 . | ||
EFAULT |
sops 이 지 정 한 주 소 , 혹 은 timeout 을 접 근 할 수 없 다 . | ||
EFBIG |
일 부 연 산 에 대 하 여 , sem_num 값 이 0 보 다 작 거 나 , 이 집 합 의 세 마 포 어 갯 수 이 상 이 다 . | ||
EIDRM |
세 마 포 어 집 합 이 삭 제 되 었 다 . | ||
EINTR |
대 기 열 에 서 유 휴 시 , 프 로 세 스 는 감 지 되 어 야 하 는 세 마 포 어 을 수 신 한 다 . | ||
EINVAL |
세 마 포 어 집 합 이 존 재 하 지 않 거 나 , semid 가 0보 다 작 다 . 또 는 , nsops가 양 수 가 아 니 다 . | ||
ENOMEM |
sem_flg 가 SEM_UNDO 이 지 만 , 시 스 템 이 undo 구 조 를 할 당 할 만 큼 충 분 한 메 모 리 를 갖 고 있 지 않 다 . | ||
ERANGE |
일 부 연 산 에 대 하 여 , semop+semval 가 구 현 에 따 라 다 르 게 정 해 지 는 semval 의 최 대 값 SEMVMX 보 다 더 크 다 . |
주 의
프 로 세 스 의 sem_undo 구 조 들 은 fork(2) 시 스 템 호 출 시 자 식 프 로 세 스 로 상 속 되 지 않 는 다 . 대 신 에 이 구 조 들 은 execve(2) 시 스 템 호 출 의 실 행 을 통 한 대 체 프 로 세 스 로 상 속 가 능 하 다 .
다 음 들 은 세 마 포 어 세 트 상 에 서 semop 호 출 에 영 향 을 미 침 으 로 서 자 원 에 대 한 한 계 이 다 .
SEMOPM |
하 나 의 semop 호 출 에 대 해 허 용 된 연 산 들 의 최 대 숫 자 . 정 책 의 존 적 이 다 . | ||
SEMVMX |
semval 에 대 해 최 대 로 허 용 된 값 . 구 현 의 존 적 이 다 (32767). |
버 그
시 스 템 은 undo 요 청 으 로 프 로 세 스 에 의 해 변 경 된 개 별 세 마 포 어 에 대 한 개 별 프 로 세 스 sem_undo 구 조 를 관 리 한 다 . 이 러 한 구 조 들 은 프 로 세 스 exit에 자 유 롭 다 . undo 메 커 니 즘 에 있 어 잘 못 된 점 의 주 요 한 원 인 은 연 산 의 극 소 세 트 를 세 마 포 머 의 배 열 로 만 드 는 관 념 에 적 합 하 게 한 다 는 데 있 다 . 수 많 은 배 열 및 개 별 세 마 포 어 에 대 한 undo 요 청 들 은 semopt 호 출 들 위 에 축 적 될 수 있 다 . 빠 져 나 갈 때 , 프 로 세 스 가 잠 자 고 있 어 야 하 는 가 ? 또 는 모 든 undo 연 산 들 이 IPC_NOWAIT 플 래 그 에 효 력 이 될 수 있 도 록 적 용 되 어 야 하 는 가 ? 즉 시 적 용 되 어 야 하 는 현 재 의 undo 연 산 들 은 기 다 림 이 필 요 한 연 산 들 은 무 시 된 다 . 따 라 서 , 악 의 없 는 undo의 활 용 은 사 적 인 세 마 포 어 에 의 해 서 만 보 증 된 다 .
호 환
SVr4, SVID. SVr4는 EINVAL, EFBIG, ENOSPC의 추 가 에 러 조 건 들 에 대 한 문 서 를 제 공 한 다 .
관 련 항 목
번 역
ASPLINUX
<man [AT] asp-linux.kr> 2000년 7월
29일
배 성 훈 <plodder [AT] kldp.org>
2000년 11월 18일
한 글 Manpage 프 로 젝
트 (http://man.kldp.org) 2005년 2월
13일