有名信号量:
     1.创建
         semget 
         int semget(key_t key, int nsems, int semflg);
         功能:
             创建一组信号量
         参数:
             key:IPC对象名
             nsems:信号量的个数
             semflg:IPC_CREAT 
         返回值:
             成功返回信号量ID
             失败返回-1 
    2.销毁 
         semctl
         int semctl(int semid, int semnum, int cmd, ...);
         功能:   
             向信号灯发送命令
         参数:
             semid:信号灯ID号
             semnum:具体操作信号量的编号
             cmd:
                 IPC_RMID    删除信号灯
                 SETVAL      设置信号量的值
         返回值:
             成功返回0
             失败返回-1 
        初始化:
         union semun {
             int              val;    /* Value for SETVAL */
             struct semid_ds *buf;    /* Buffer for IPC_STAT, IPC_SET */
             unsigned short  *array;  /* Array for GETALL, SETALL */
             struct seminfo  *__buf;  /* Buffer for IPC_INFO
                                         (Linux-specific) */
         };
    3.申请信号量
     4.释放信号量
         semop 
         int semop(int semid, struct sembuf *sops, size_t nsops);
         功能:
             对信号量完成操作
         参数:
             semid:信号灯的ID号
             sops:信号量操作的数组首地址
             nsops:数组元素个数
         返回值:
             成功返回0 
             失败返回-1 
         unsigned short sem_num;  /* semaphore number */        操作信号量的下标
          short          sem_op;   /* semaphore operation */     具体对信号量的操作(申请:-1  释放:+1)
          short          sem_flg;  /* operation flags */         SEM_UNDO