//my_pxsem_svsem/sem_open.c
	/*
	 * (O_CREAT  ) 
	 * (O_CREAT  O_EXCL    ).
	 *     ,    .
	 */
	if ( (key = ftok(pathname, 0)) == (key_t) -1)
		goto err;
	if ( (semid = semget(key, 0, semflag)) == -1)
		goto err;

	arg.buf = &seminfo;
	for (i = 0; i < MAX_TRIES; i++) {
		if (semctl(semid, 0, IPC_STAT, arg) == -1)
			goto err;
		if (arg.buf->sem_otime != 0)
			goto finish;
		sleep(1);
	}
	errno = ETIMEDOUT;
err:
	save_errno = errno;		/*    semctl()   errno */
	if (semid != -1)
		semctl(semid, 0, IPC_RMID);
	errno = save_errno;
	return(SEM_FAILED);

finish:
	if ( (sem = malloc(sizeof(mysem_t))) == NULL)
		goto err;
	sem->sem_semid = semid;
	sem->sem_magic = SEM_MAGIC;
	return(sem);
}
