SparcStation semaphores

Jari Mustaj{rvi RC 940 mustajar at rc.nokia.fi
Wed Mar 28 19:50:39 AEST 1990


I have this mysterious problem, that I can't solve myself.  I hope someone
could help me..

At the end of this follows a little test, which doesn't pass in SPARC
Stations, but works very well in SUN 3 machines. Both environments use
System 5 libraries. The problem is the semaphore call semctl with third
argument IPC_STAT. Otherwise the semaphores work very well. 

I have compiled the test using following script ( assuming the source file
is called rossi.c )

/usr/5bin/cc -o rossi rossi.c

Test command is 'rossi 100'

Output from SPARC::

 using argument semaphore key number 100
 semctl: Bad address
 semctl: semid = 210, pars.sem_nsems = 33027

Output from SUN 3/50::

 using argument semaphore key number 100
 semctl: semid = 110, pars.sem_nsems = 1 

And next the test:

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/sem.h>
#include <sys/shm.h>

#define SEMKEY 95 

main (argc, argv)
int argc;
char *argv[];
{
  int semid ;
  int semkey ;

  struct sembuf sop;
  struct semid_ds pars ;

  if (argc == 2) {
    semkey = atoi (argv [1]) ;
    printf ("using argument semaphore key number %d\n", semkey) ;
  }
  else {
    semkey = SEMKEY ;
    printf ("using default semaphore key number %d\n", semkey) ;
  }

  semid = semget ( SEMKEY,1,(IPC_CREAT|IPC_EXCL|0600));
  if(semid == -1) perror("semget");

  sop.sem_flg = 0;
  sop.sem_num = 0;
  sop.sem_op = 1;

  if (semop(semid,&sop,1) == -1) perror("semop");

  if (semctl(semid,0,IPC_STAT,&pars) == -1) perror("semctl") ;

  printf("semctl: semid = %d, pars.sem_nsems = %d\n",semid,pars.sem_nsems) ;

  if (semctl(semid,0,IPC_RMID,0)) perror("semctl");
}

Regards, Jari Mustajarvi.



More information about the Comp.sys.sun mailing list