📄 semprod.c
字号:
/*gcc -o pro semcons.c./prothis is better otherwise some error is comingipcs ;;;; ipcrm -S key ;;;; to remove semaphore*/#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<sys/types.h>#include<sys/ipc.h>#include<sys/sem.h>#include<string.h>#define BUF "temp" #define SEM1 0#define SEM2 1union semun { int val; struct semid_ds *buf ; ushort *array; };int main(){printf("sayooj sdfsd\n");struct sembuf acquire = {0 ,-1 ,SEM_UNDO}; struct sembuf release = {0 ,1,SEM_UNDO};static ushort sem1sem2[2]={1, 0};union semun arg;//arg.array[1]=0;key_t uniqkey;uniqkey=ftok(".",'A');int semid=semget(uniqkey,2,IPC_CREAT|IPC_EXCL|0666);if(semid==-1) { printf("error in making semaphore\n"); }arg.array=sem1sem2;if(semctl(semid,0,SETALL,arg)==-1) { printf("error in initialization\n"); }FILE *fp;int i=0;i++;sleep(3);while(i<10) { printf("generated number = %d by %d \n",i,getpid()); acquire.sem_num=SEM1; if(semop(semid,&acquire,1)==-1) { printf("waiting\n"); } fp=fopen(BUF,"w"); if(fp==NULL) { printf("error filepointe\n"); } fprintf(fp,"%d",i);//i++; fclose(fp); release.sem_num=SEM2; printf("sent number = %d \n",i); if(semop(semid,&release,1)==-1) { printf("error releasing \n"); } sleep(2); i++; }sleep(5);if(semctl(semid,0,IPC_RMID,0)==-1) { printf("eroor in removing \n"); }return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -