美文网首页
信号数组的创建进程

信号数组的创建进程

作者: yueyue216 | 来源:发表于2017-01-10 15:43 被阅读0次

// 本进程为信号量数组的创建进程

#include

#include

#include

#include

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) */

};

int main(int argc, char *argv[])

{

   int semid;

   key_t key;

   key = ftok("/", 'a');

   // 1.创建

   // int semget(key_t key, int  nsems,  int semflg);

   // 参数:

   // key  用于创建信号量数组的key值

   // nsems 创建的信号两数组中信号量的个数

   // semflg 与shmget类似,为信号量数组的标志位

   //      IPC_CREAT   IPC_EXCL    SIRUSR  SIWUER...

   // 返回值:成功,返回信号量数组的ID;失败,-1

   if((semid = semget(key, 1, IPC_CREAT | 0666)) == -1)

   {

       perror("semget failed");

       return 1;

   }

   printf("semid : %d\n", semid);

// 2.初始化

// int semctl(int semid, int semnum, int cmd, ...);

// 参数:

// semid    待操作的信号量数组的ID

// semnum   待操作的信号量数组中的信号两的编号(从0开始)

// cmd      执行的具体操作种类

// union semun  根据cmd取值的不同,来传递不同的参数

#if 0

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) */

};

#endif

union semun arg;

arg.val = 1;        // 指定下标信号量的初始值

semctl(semid, 0, SETVAL, arg);

// 3.wait操作(-1)

// int semop(int semid, struct sembuf *sops, unsigned nsops);

// 参数:

// semid    待操作的信号量集ID

// sops nsops   组合起来传递一个struct sembuf类型的数组,以供信号量集中的各个编号的信号量进行操作

struct sembuf s_op1;

s_op1.sem_num = 0;

s_op1.sem_op = -1;

s_op1.sem_flg = SEM_UNDO;

semop(semid, &s_op1, 1);

   printf("hello shangqian!!!\n");

// 4.post操作(+1)

struct sembuf s_op2;

s_op2.sem_num = 0;

s_op2.sem_op = 1;

s_op2.sem_flg = SEM_UNDO;

semop(semid, &s_op2, 1);

   printf("before destroy sem array...\n");

   system("ipcs -s");

// 5.销毁

semctl(semid, 0, IPC_RMID);

printf("after destroy sem array...\n");

system("ipcs -s");

return 0;

}

相关文章

  • 信号数组的创建进程

    // 本进程为信号量数组的创建进程 #include #include #include #include uni...

  • 用PCNTL实现PHP多进程

    PHP的进程控制支持实现了Unix方式的进程创建, 程序执行, 信号处理以及进程的中断。 进程控制不能被应用在We...

  • 进程20170104

    进程:1、进程的五大状态 // 练习1:在父进程中为SIGINT信号注册处理函数,然后创建一个子进程,父子进程均进...

  • Linux内核及其功能

    管理进程:内核负责创建和销毁进程, 并处理它们与外部世界的联系(输入和输出),不同进程间通讯(通过信号,管道,或者...

  • Choreographer

    他是控制应用进程绘制时机的,会在收到Vsync信号后调用应用进程的刷新 Choreographer创建,他是跟Vi...

  • 信号量

    线程中的信号量 有名信号量:进程通信 无名信号量:线程通信 初始化:调用sem_init()就可以创建成功,val...

  • C/C++面试题

    1, 信号的声明周期 答: 信号的产生 -> 信号在进程中注册 -> 信号在进程中的注销 -> 执行信号处理函数 ...

  • 一些面试题

    1, 信号的声明周期 答: 信号的产生 -> 信号在进程中注册 -> 信号在进程中的注销 -> 执行信号处理函数 ...

  • signal

    信号: 信号是组概念,发送方和接收方需要配对存在,比如进程A发送信号X给进程B,进程B接收信号按信号处理函数进行响...

  • linux信号以及core

    何为信号 信号(signal)用于通知进程发生了某种情况。进程有以下3种处理信号的方式: 忽略信号。有些信号表示硬...

网友评论

      本文标题:信号数组的创建进程

      本文链接:https://www.haomeiwen.com/subject/jagkbttx.html