/* Fájlnév: term-fogy-fogyaszto.c
   Az előadáson szereplő klasszikus termelő-fogyasztó problémára négy 
   fájlban adunk példát. 
   Ez a "fogyasztó" program. Az inicilalizáló után indítható tetszőleges
   példányba. Célszerű a háttérben futtani, megjegyezni a pid-jét. 
   Végtelen ciklusban fut a saját időterében, SIGINT szignállal lehet
   terminálni. 
   Készítette: dr. Vadász Dénes
   2006. február
*/

#include "mysem.h"

main( ) {
int	id; 		/* A szemafor leírója */

	if ((id = semget(TFKEY, 3, 0)) < 0) {
		perror(" Nincs 'előkészítve' a raktár. ");
		exit(-1);
	}
	
	/* Végtelen ciklusban "fogyasztjuk" a terméket. */
	for(;;) {
		/* Felkészülünk a normális terminálódásra: SIGINT szignál
	    	   érkezése során exitálni kell. */
		signal(SIGINT, exit);

		printf("       A %d fogyasztó nem kritikus szakasza.\n",
					getpid( )); 		
		/* Itt a "belépési" szakasz. */
		semop(id, &fogyaszto_be[0], 2);
		    signal(SIGINT, SIG_IGN); /* A kritikus szakaszban ne! */
		    printf("       A %d fogyasztó belépett a raktárba. \n", 
					getpid( )); 
		    sleep((int)(getpid( )%3)); 
		/* Itt a kilépés */
		semop(id, &fogyaszto_ki[0], 2); 
	}
	
}

