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

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

		아래 소스를 입력하여 컴파일 하게 되면
   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);
}
[관리자] 패스워드를 입력 하십시오. 답장이 존재하면 함께 삭제됩니다.[ 목록 | 이전 ]
패스워드:    

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