>> Read No. 30396 article  
프로그램 잘하시는 고수님들... 질문이여..

등록 2001-05-15 15:46:00     조회 1
이름 초보자    

		아래 소스를 입력하여 컴파일 하게 되면
   union semun sem_union;
 이 부분에서 에러가 나는데... 사이즈를 계산할 수 없다는 에러가 납니다...
왜 그런지 가르쳐 주세요... 어떻게 하면 해결할 수 있나요?
  /* 세마포어 테스트 예제 - sem1.c */
 #include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <errno.h>
 #define SEMKEY 0x100
 /*
 * 세마포어를 생성하거나 식별자를 얻는다. 
 * 
 * 매개변수 : semkey  - 생성하거나 식별자를 얻을 세마포어에 사용하는 키값
 * 반환값   : 에러시 -1,  성공시 해당 세마포어의 식별자
 *
 */
 int initsem(int semkey) {
  int semid, status = 0;
  union semun sem_union;
 
  if((semid = semget(semkey, 1, 0666 | IPC_CREAT | IPC_EXCL)) == -1) {
    if(errno == EEXIST) {
      semid = semget(semkey, 1, 0); /* 이미 존재할 경우에 식별자만 얻는다. */
    }
  } else {
    sem_union.val = 1;  /* 세마포어를 생성한 프로세스만 그 값을 초기화 */
    status = semctl(semid, 0, SETVAL, sem_union);
  }
  if (semid == -1 || status == -1) {
    perror("initsem");
    return -1; 
  }
  /* 식별자가 0이 될 수 있으므로 에러시 0을 반환하지 않도록 주의 */
  return semid;
}
 int p(int semid) {
  struct sembuf p_buf;
   p_buf.sem_num = 0;
  p_buf.sem_op = -1;
  p_buf.sem_flg = SEM_UNDO;
 
  if(semop(semid, &p_buf, 1) == -1) {
    perror("p(semid)");
    return -1;
  }
  return 0;
}
 int v(int semid) {
  struct sembuf v_buf;
 
  v_buf.sem_num = 0;
  v_buf.sem_op = 1;
  v_buf.sem_flg = SEM_UNDO;
 
  if(semop(semid, &v_buf, 1) == -1) {
     perror("v(semid)");
     return -1;
  }
  return 0;
}
 void handlesem(int semkey) {
   int semid, pid = getpid();
 
   if((semid = initsem(semkey)) < 0) exit(1);
 
   printf("process %d before critical section", pid);
 
   p(semid);   
 
   printf("process %d in critical section", pid);
 
   sleep(2);
 
   printf("process %d leaving critical section", pid);
 
   v(semid);
 
   printf("process %d exiting", pid);
   exit(0);
}
 void main() {
   if(fork() == 0) handlesem(SEMKEY);
 
   if(fork() == 0) handlesem(SEMKEY);
 
   if(fork() == 0) handlesem(SEMKEY);
}
이름
암호
Register [ localhost 목록보기 윗글 아랫글
글쓰기
답장쓰기 수정 삭제
정규표현식 [ 상세 검색 ]
페이지로딩: [ 0.94 초 ] 작업시간: [ 0.05 초 ]

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved
[TOP]

적수네 동네
+
| 적수네 동네
| 공부방
| 리눅스 잡지 서고
| LSN 소스
| 링크 모음
+---+
게시판
+
| 떠들어보세!
| 질문과 답변
| 새소식과 정보
| 1원짜리 팁?
| 대화방
+---+
칼럼?
+
| 세하 훔쳐보기
| Welcome2nite
| 혜진의 염장판
+---+
리눅스 상표권
+
| 반대 서명란
| 토론 게시판
+---+
GNU
+
| GNU 선언문
| GNU GPL
| GNU 미러 목록
+---+
프로젝트?
+
| 리눅스카운터
| RC5DES
| 실질헌법 제작
+---+
커널 소식
+
| 안정 버젼: 2.4.14
+---+
테마 선택
+
LSN 방송국?
+
| OFF AIR
+---+
회원
+
| 로그인
+---+
[ 적수네 동네 ] [ 리눅스 상표권 독점 반대 ] [ 한글 리눅스 문서 프로젝트 ] [ KrLine ] [ 사랑넷 ] [ Valid HTML 4.0! ] [ SlashDot ] [ Freshmeat ]
Copyleft (C) 1998-2001 Byeong-Chan Kim . License
TIME: 1789543987
System by WYZsoft, HDD by I.O.Linux, Mizi Research, Embryo, WOWLINUX, Domain by SarangNet, Network by KrLine.