- 论坛徽章:
- 0
|
- #include<stdio.h>;
- #include<sys/types.h>;
- #include<sys/ipc.h>;
- #include<sys/sem.h>;
- #include<unistd.h>;
- #define SEMK 0x12345L
- #define PERMS 0666
- #define DEBUG
- static struct sembuf op[2]={0,-1,0,
- 0, 1,0};
- int InitSem()
- {
- return semget(SEMK,1,PERMS|IPC_CREAT);
- }
- int SemDel(int sem)
- {
- return semctl(sem,0,IPC_RMID,0) ;
- }
-
- int SetSem( int sem)
- {
- union semun {
- int val;
- struct semid_ds *buf;
- ushort *array;
- } arg;
-
- arg.val=0;
- return semctl(sem,0,SETVAL,arg);
- }
- int P()
- {
- int semid;
-
- semid=semget(SEMK,1,PERMS);
- if (semid<0) return -1;
- return(semop(semid,&op[0],0));
- }
- int V()
- {
- int semid;
-
- semid=semget(SEMK,1,PERMS);
- if (semid<0) return -1;
- return(semop(semid,&op[1],0));
- }
- main()
- {
- int semid;
- int rc;
- pid_t pid;
-
- rc = InitSem();
- if(rc<0)
- {
- perror("create sem error");
- exit(0);
- }
- semid=rc;
- rc = SetSem(semid);
- if(rc<0)
- {
- perror("set sem");
- system("ipcs -as");
- }
- pid=fork();
- if(pid==0)
- {
- P();
- sleep(60);
- V();
- }
- if(pid>;0)
- {
- sleep(5);
- P();
- printf("this is the parents do:\n");
- system("ls -l|more");
- V();
- }
- rc=SemDel(semid);
- if(rc<0)
- {
- perror("del sem");
- system("ipcs -as");
- }
- }
复制代码 |
|