

---------------------------------------------------------------------------------------------------------------
SKIELET PROGRAMU GLOWNEGO SKZ
---------------------------------------------------------------------------------------------------------------
1. program glowny funkcja main
2. procedury odwouja sie do funkcji zewnetrznych i sa uruchamiane jako procesy potomene
3. po przerwaniu lub przy zakonczeniu funkcji main - zabijamy procesy potomene
4. konczymy dzialanie programu

---------------------------------------------------------------------------------------------------------------
PRZYKLAD PROGRAMU
---------------------------------------------------------------------------------------------------------------
/home/jpw/Demony/forka.c

aplikacja potomna /home/jpw/Demony/forca_clock.c i po skompliowaniu ---> f_clock.
aplikacja potomna wyswietla czas hh:mm co 3 sekundy
--------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------
Program glowny
--------------------------------------------------------------------------------------------------------------

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>

#define EXIT_FAILURE 1 //koniecznie zdefioniowac makros

int f_clock(void)
	{
	pid_t pid;// deklaracja 
 	pid=fork();
	if(pid==-1) perror("fork");
	if (!pid) {
		//wywolujemy zewnetrzna aplikaje jako proces w tle
		int ret=execl("/home/jpw/Demony/f_clock", "f_clock", NULL);
			//uwaga w funcji execl(...,NULL) grupe lancuchow konczy NULL
		if (ret==-1) perror("execl");
			return EXIT_FAILURE;
		  }
	return pid;
	}


int main (void)
{
//---uruchamiamy proces w tle ----
int child_PID=f_clock();//zapuszczamy potomka aby dzialal sobie niezaleznie
//--- end uruchomienia procesu w tle

//------- program glowny --------
int i=0;
for(;i<10;i++) {printf("TIME:\n"); sleep(4);}//procss glownny
//------- end program glowny ----- 


// -- przy wyjsciu z programu zabijamy procesy potomne ------
kill(child_PID,SIGTERM);//zabijanie potomka uruchomionego wczesniej kiedy wychodzimy z programu
//----------------end zabijania procesu potomnego ---------

		
return 0;
}

-------------------------------------- Koniec aplikacji glownej ----------------------------------------------





--------------------------------------------------------------------------------------------------------------
aplikacja dzialajaca jako proces potomny, wywolywana przez aplikacja glowna
--------------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <time.h>


int main(void)
{
struct tm *t_m; //struktura formatu zegara systmowego
time_t t; 
for (;;){
time(&t); //pobiera czas
t_m=localtime(&t); //formatuje czas do struktury
int hh=t_m->tm_hour; //0..23 - odczytujemy godzine
int mm=t_m->tm_min; //0..59 - odczytujemy minute
sleep(3);//uzypiamy na 3 sekundy
printf("hh=%d mm=%d\n",hh,mm);} 
return 0;
}






