Forum » Programiranje » Procesi
Procesi
somebody199 ::
Zanima me kako bi lahko ta program še drugače zapisal in če mi lahko kdo o tem kaj razloži, kaj je fork?, kaj je wait?, čim bolj podrobno, hvala za vse informacije. OPOMBA: zanima me še kako bi pri fork ()preverjal vse možnosti in sicer oče/sin/napaka.
Napišite program, ki bo preko vhodnih argumentov prebral eno število (uporabite atoi funkcijo nad vhodnimi argumenti za pretvorbo vhodnih nizov v integer). Nadalje naj program ustvari n sinov (prvi vhodni argument), kjer vsak i-ti ustvarjeni sin izračuna in izpiše i-to fakulteto(primer: prvi ustvarjeni sin: 1!, drugi sin: 2! tretji sin 3!,...) (operacijo implementirajte sami - ni dovoljeno uporabiti funkcije obstoječih knjižnic).
Pazite, da se oče ne konča pred sinovi ('sirote' so nesprejemljive) in poskušajte program napisati čimbolj robustno. Prav tako pazite, da ne boste ustvarili neskončne zanke, ki bi generirala procese (fork bombo)!
Oddati morate arhiv s sledečimi zbirkami;
zbirko z imenom procesi.c in
Makefile, ki zgradi izvedljiv program procesi in pobriše vse generirane zbirke in direktorije.
Make file:
Program.c:
Napišite program, ki bo preko vhodnih argumentov prebral eno število (uporabite atoi funkcijo nad vhodnimi argumenti za pretvorbo vhodnih nizov v integer). Nadalje naj program ustvari n sinov (prvi vhodni argument), kjer vsak i-ti ustvarjeni sin izračuna in izpiše i-to fakulteto(primer: prvi ustvarjeni sin: 1!, drugi sin: 2! tretji sin 3!,...) (operacijo implementirajte sami - ni dovoljeno uporabiti funkcije obstoječih knjižnic).
Pazite, da se oče ne konča pred sinovi ('sirote' so nesprejemljive) in poskušajte program napisati čimbolj robustno. Prav tako pazite, da ne boste ustvarili neskončne zanke, ki bi generirala procese (fork bombo)!
Oddati morate arhiv s sledečimi zbirkami;
zbirko z imenom procesi.c in
Makefile, ki zgradi izvedljiv program procesi in pobriše vse generirane zbirke in direktorije.
Make file:
CC = gcc CFLAGS = -ansi -Wall -pedantic -lm TARGETS = procesi # rules # default # targets all: $(TARGETS) clean: rm -fr $(TARGETS) *~ *.og
Program.c:
#include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <math.h> int main(int argc, char** argv) { int stevec,x=1; if(argc >1) { int y= atoi(argv[1]); for(stevec=1;stevec<=y;stevec++) { int zacasna = fork(); x=stevec*x; if(zacasna == 0) { printf("Sin %d ima fakulteto = %d \n\n",stevec,x); exit(0); }else wait(&zacasna); } }else { printf("Manjka vhodni parameter !!!\n\n"); } return EXIT_SUCCESS; }
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C] ProcesiOddelek: Programiranje | 970 (879) | Cvenemir |
» | [C] Vsota števil v poljuOddelek: Programiranje | 1270 (1208) | Cvenemir |
» | C (Izračun povprečja)Oddelek: Programiranje | 1617 (1251) | joze67 |
» | [C] in delo s procesi v LinuxuOddelek: Programiranje | 2278 (1764) | OmegaM |
» | C - pomočOddelek: Programiranje | 1450 (1190) | Thagirion |