#include int sigemptyset(sigset_t *set); 将信号集合清空。 int sigfillset(sigset_t *set); 将信号集合设置成包含所有的信号。在对信号进行操作以前一定要对信号集进行初始化。
int sigaddset(sigset_t *set, int signo); 向信号集中加入signo对应的新信号。 int sigdelset(sigset_t *set, int signo); 从信号集中删除signo对应的一个信号。 int sigismember(const sigset_t *set, int signo); 判断某个信号是否在信号集中。返回1则在,0则不在。
#include int sigprocmask(int how,const sigset_t *set, sigset_t *oset);用来设置进程的信号屏蔽码。信号屏蔽码可以用来在某段时间内阻塞一些信号集中的信号,如果信号不在信号集中,就不必讨论它,因为肯定不响应,是否能生成也不肯定,我没有做过试验。
信号量这种东西我们在操作系统课程中就已经接触过了,这里只是再草草说几句。信号量分为有名和无名两种。进程间通信用有名信号量,同一进程内部通信一般用无名信号量。这个我不再多说。 2.1信号量相关函数 #include #include #include int semget(key_t key, int nsems, int semflg); 创建一个新的信号量组或获取一个已经存在的信号量组。
#include #include #include int semop(int semid, struct sembuf *sop, int nsops); semop函数可以一次对一个或多个信号量进行操作。 Int semctl(int sem_id, int semnum, int cmd,/*union semun arg*/…); 该函数可以用来获取一些信号量的使用信息或者是来对信号量进行控制。
Int msgget(key_t key, int msgflg);获取一个存在的消息队列的ID,或者是根据跟定的权限创建一个消息队列。但是怎么样去删除这个消息队列,我还不十分清楚。 Int msgctl(int msqid, int cmd, struct msqid_ds *buf);用来从msqid_ds中获取很多消息队列本身的信息。 Int msgsnd(int msqid, void *msgp, size_t msgsz, int msgflg);用于向队列发送消息。 Int msgrcv(int msqid, void *msgp, size_t msgsz, long int msgtyp, intmsgflg); 从队列中接收消息。 我这个文档里面对消息队列中的一些临界情况所述不多,因为这是我的小结,而非介绍。在GNU C库技术中可以看到它的详细介绍。