unix-ipc
来源:互联网 发布:udp源端口号 编辑:程序博客网 时间:2024/06/12 05:05
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
union semun{int val; struct semid_ds *buf;unsigned short int *array;};
void print(int); /*表示共享资源*/
int value; /*用于取得信号灯的值*/
int main(int argc,char **argv)
{
int n=0; /*用于循环*/
int id; /*信号灯*/
struct sembuf lock_it;
union semun options;/*创建信号灯*/
id = semget(ftok(argv[1],0),1,IPC_CREAT|IPC_EXCL|0666);
if(id==-1)
perror("semget fail");
options.val=3;/*设置信号灯的值*/
semctl(id,0,SETVAL,options);
while(n++<5)
{
if(fork()==0) /*创建进程*/
{ while(1)
{ lock_it.sem_num=0;
lock_it.sem_op=-1; /*信号灯减1*/
lock_it.sem_flg=IPC_NOWAIT;
if((semop(id,&lock_it,1))==-1)
{
if(errno==EAGAIN) /*如果没有可用的信号灯就继续循环*/
continue; exit(1);
} print(id); /*执行表示共享资源的函数*/
}
}
}
sleep(3);
semctl(id,0,IPC_RMID,0); /*删除一个信号灯*/
exit(0);
}
void print(int id){
printf("I get id,my pid is %d\n",getpid());
value=semctl(id,0,GETVAL);
printf("now the value have %d\n",value);
sleep(1);
}
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
union semun{int val; struct semid_ds *buf;unsigned short int *array;};
void print(int); /*表示共享资源*/
int value; /*用于取得信号灯的值*/
int main(int argc,char **argv)
{
int n=0; /*用于循环*/
int id; /*信号灯*/
struct sembuf lock_it;
union semun options;/*创建信号灯*/
id = semget(ftok(argv[1],0),1,IPC_CREAT|IPC_EXCL|0666);
if(id==-1)
perror("semget fail");
options.val=3;/*设置信号灯的值*/
semctl(id,0,SETVAL,options);
while(n++<5)
{
if(fork()==0) /*创建进程*/
{ while(1)
{ lock_it.sem_num=0;
lock_it.sem_op=-1; /*信号灯减1*/
lock_it.sem_flg=IPC_NOWAIT;
if((semop(id,&lock_it,1))==-1)
{
if(errno==EAGAIN) /*如果没有可用的信号灯就继续循环*/
continue; exit(1);
} print(id); /*执行表示共享资源的函数*/
}
}
}
sleep(3);
semctl(id,0,IPC_RMID,0); /*删除一个信号灯*/
exit(0);
}
void print(int id){
printf("I get id,my pid is %d\n",getpid());
value=semctl(id,0,GETVAL);
printf("now the value have %d\n",value);
sleep(1);
}
0 0
- unix-ipc
- UNIX IPC
- UNIX Domain Socket IPC
- UNIX Domain Socket IPC
- Unix Domain Socket IPc
- UNIX Domain Socket IPC
- UNIX Domain Socket IPC
- UNIX Domain Socket IPC
- unix IPC 应知应会
- UNIX Domain Socket IPC
- UNIX Domain Socket IPC
- UNIX Domain Socket IPC
- UNIX IPC-----pipe
- UNIX IPC -----FIFO 实现
- UNIX Domain Socket IPC
- UNIX Domain Socket IPC
- UNIX Domain Socket IPC
- UNIX Domain Socket IPC
- unix-mmap()
- 关于mysql存储过程(表数据同步批量新增,批量修改)
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- POJ 3984 迷宫问题 (bfs 水)
- 超棒的Web和移动应用开发框架(二)
- unix-ipc
- C++插件架构浅谈与初步实现
- HDU 2612 Find a way (bfs)
- 超棒的Web和移动应用开发框架(三)
- from nova to ironic(5)
- POJ2594 Treasure Exploration【二分图最小路径覆盖】【Floyd】
- Android如何使用JDBC连接SQLite数据库?
- UNIX练习-tcp/ip客户端( - - 写unix得审核....)
- 最短路模板 Dijkstra+Floyd+SPFA