Semaphoren prog
-
Das programm sollte mit drei Prozessen über ein Shellscript laufen,
ich habe aber einen Fehler drin, bei semop() bekomme ich invalid argument,
bin für jede hilfe dankbar#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ipc.h> #include <sys/sem.h> #include "header.h" static int semid; static struct sembuf semap; int main(int argc, char** argv){ int sleep_time,i,g; union semun arg; arg.val=1; if (argc!=3) { perror("Falsche Parameteranzahl\n"); exit(-1); } sleep_time=atoi(argv[2]); if((semid=semget(KEY,1,IPC_CREAT|IPC_EXCL |0666))!=-1){ if(semctl(semid,0,SETVAL,arg)==-1){ perror("semctl"); exit(-1); } } for(i=0;i<ITERATIONS;i++){ semap.sem_num=0; semap.sem_op=-1; semap.sem_flg=0; if(semop(semid,&semap,1)==-1){ perror("semop"); exit(EXIT_FAILURE); } /*KRITSCHER BEREICH START*/ for(g=0;g<ANZ_ZEICHEN;g++){ printf("%s",argv[1]); fflush(NULL); sleep(sleep_time); } printf("\n"); semap.sem_num=0; semap.sem_op=1; semap.sem_flg=0; if((semop(semid,&semap,1))==-1){ perror("semop"); exit(EXIT_FAILURE); } /*KRITISCHER BEREICH ENDE*/ } return EXIT_SUCCESS; }