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; 
    }
    

Anmelden zum Antworten