Forum » Programiranje » Procesi v Linux-u
Procesi v Linux-u
hurlimannxt ::
Pozdravljeni!
Prosil bi, če je kdo pri volji, da bi rešil to nalogo, nalogo je treba reševat v Linuxu. Imam več nalog, ki imajo opravka s procesi v linux-u, ampak žal nimam niti malo pojma o načinu reševanja zato bi rabil en rešen primer. Po tem primeru bi še ostale naloge reševal, ki jih imam.
Upam, da se me kdo usmili.
Pa še eno vprašanje imam, če ve kdo za koga v Mariboru ali Celju, da inštruira programiranje v C++. Ker imam velik težav, bi se raj na koga takega obrnu, pa bi zadeve hitrej rešu.
Napišite program, ki bo preko vhodnih argumentov prebral dve števili (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 potenco števila podanega kot drugi vhodni argument(primer za potenco: prvi ustvarjeni sin: osnova¹, drugi sin: osnova², tretji sin: osnova³,...).
Pazite, da se oče ne konča pred sinovi (zombiji so nesprejemljivi) in poskušajte program napisati čimbolj robustno. Prav tako pazite, da ne boste ustvarili neskončne zanke, ki bi generirala procese (fork bombo)!
Oddati moram arhiv s sledečimi zbirkami;
* zbirko in
* Makefile, ki zgradi izvedljiv program procesi in pobriše vse generirane zbirke in direktorije.
Prosil bi, če je kdo pri volji, da bi rešil to nalogo, nalogo je treba reševat v Linuxu. Imam več nalog, ki imajo opravka s procesi v linux-u, ampak žal nimam niti malo pojma o načinu reševanja zato bi rabil en rešen primer. Po tem primeru bi še ostale naloge reševal, ki jih imam.
Upam, da se me kdo usmili.
Pa še eno vprašanje imam, če ve kdo za koga v Mariboru ali Celju, da inštruira programiranje v C++. Ker imam velik težav, bi se raj na koga takega obrnu, pa bi zadeve hitrej rešu.
Napišite program, ki bo preko vhodnih argumentov prebral dve števili (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 potenco števila podanega kot drugi vhodni argument(primer za potenco: prvi ustvarjeni sin: osnova¹, drugi sin: osnova², tretji sin: osnova³,...).
Pazite, da se oče ne konča pred sinovi (zombiji so nesprejemljivi) in poskušajte program napisati čimbolj robustno. Prav tako pazite, da ne boste ustvarili neskončne zanke, ki bi generirala procese (fork bombo)!
Oddati moram arhiv s sledečimi zbirkami;
* zbirko in
* Makefile, ki zgradi izvedljiv program procesi in pobriše vse generirane zbirke in direktorije.
- spremenil: hurlimannxt ()
metalc ::
Samo namig. V Unixih (in tudi v Linuxu) se procesi "razmnožujejo" s sistemskim klicem (oz. če hočeš, funkcijo) fork() in po vrnjeni vrednosti ugotoviš, ali si v "staršu" ali "potomcu". Ko boš prebral man, bi ti moralo biti jasno dovolj, da boš znal nadaljevati.
bigbada ::
Evo ti rešeno.
Pa še Makefile:
#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) { if(argc!=3) //ce argument count(argc) ni 3 izpisi navodila { printf("Napacen vnos! Podaj argumente!\n"); } else { //z funkcijo atoi pretvorimo vhodne argumente, do katerih dostopamo preko argument vectorja(argv) v integerje int n=atoi(argv[1]); int osnova=atoi(argv[2]); int sin=0; int total=1; int i=1; for(i; i<=n; i++) { total=total*osnova; sin=fork(); if(sin==0) { printf("%d ustvarjeni sin: osnova(%d) na %d = %d\n", i, osnova, i, total); exit(0); } else //cakanje na sina { wait(&sin); } } } return 0; }
Pa še Makefile:
GCC=gcc CFLAGS=-c -g LFLAGS= EXE=potence all: ${EXE}.o ${GCC} ${LFLAGS} ${EXE}.o -o ${EXE} ${EXE}.o: ${EXE}.c ${GCC} ${CFLAGS} ${EXE}.c clean: rm -rf *.o rm -rf ${EXE}
hurlimannxt ::
Hvala za odgovor in rešitev. Imam še nekaj nalog iz procesov v linux-u.
Sam sem že reševal zdaj novo nalogo iz procesov in še imam nekaj težav.
Najprej pa točna navodila
Napišite programa, kjer oče ustvari n procesov (sinov). Vsak proces (sin) naj v zanki m-krat izpiše svoj pid in izračuna povprečje prvih "k-zaporedna_številka_sina" števil. Razlika med programoma naj bo le ta, da se pri prvem programu procesi izvajajo striktno zaporedno, medtem ko se pri drugem programu procesi izvajajo striktno vzporedno (razlika v delovanju je vidna v izpisu).
Namigi:
* Razlika je v postavljanju funkcije wait (mesto kje v programski kodi se nahaja).
* Če je zaporedno število sina večje od k, program za povprečje vrne 0.
* Ko boste prepričani, da programa vredu delujeta (da ni forkbombe) poiskusite uporabiti za m večje število, da vidite razliko med vzporednem in zaporednem delovanju.
* Vrednosti n,m in k se podajo kot vhodni argumenti programa.
* Ne pozabite na zombije (oče počaka sine).
# vzporedno.c,
# zaporedno.c in
# Makefile (ki poskrbi za prevajanje obeh datotek).
Težave je da nevem kako se naredi makefile, da bom lahko preverjal dve datoteki in, če bi mi lahko še namignil kaj še moram v kodi spremenit, da bom prišel do končne rešitve, ker trenutno še zagnat ne morem.
Tole je pa koda za vzporedno in zaporedno delovanje, ki sem jo napisal.
Zaporedno delovanje
Vzporedno delovanje
Sam sem že reševal zdaj novo nalogo iz procesov in še imam nekaj težav.
Najprej pa točna navodila
Napišite programa, kjer oče ustvari n procesov (sinov). Vsak proces (sin) naj v zanki m-krat izpiše svoj pid in izračuna povprečje prvih "k-zaporedna_številka_sina" števil. Razlika med programoma naj bo le ta, da se pri prvem programu procesi izvajajo striktno zaporedno, medtem ko se pri drugem programu procesi izvajajo striktno vzporedno (razlika v delovanju je vidna v izpisu).
Namigi:
* Razlika je v postavljanju funkcije wait (mesto kje v programski kodi se nahaja).
* Če je zaporedno število sina večje od k, program za povprečje vrne 0.
* Ko boste prepričani, da programa vredu delujeta (da ni forkbombe) poiskusite uporabiti za m večje število, da vidite razliko med vzporednem in zaporednem delovanju.
* Vrednosti n,m in k se podajo kot vhodni argumenti programa.
* Ne pozabite na zombije (oče počaka sine).
# vzporedno.c,
# zaporedno.c in
# Makefile (ki poskrbi za prevajanje obeh datotek).
Težave je da nevem kako se naredi makefile, da bom lahko preverjal dve datoteki in, če bi mi lahko še namignil kaj še moram v kodi spremenit, da bom prišel do končne rešitve, ker trenutno še zagnat ne morem.
Tole je pa koda za vzporedno in zaporedno delovanje, ki sem jo napisal.
Zaporedno delovanje
#include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <math.h> //zaporedno delovanje int main() { int i; for (i=0; i<5; i++){ //fork naredi nov proces if(vfork()) == 0) { //sin print("Sin Zacetek!\n"); //delo sleep(5); //si spi 5 sekund print("Sin Konec!\n"); exit(0); } else { //oče caka 0 sekund wait(0); } } return 0; }
Vzporedno delovanje
#include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <math.h> //vzporedno delovanje int main() { int i; for (i=0; i<5; i++){ if (vfork()) == 0) { //sin print("Sin Zacetek!\n"); //delo sleep(5); print("Sin Konec!\n"); exit(0); } else { //oče } for (i=1; i<5; i++){ wait (0); } } wait (0); return 0; }
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C] ProcesiOddelek: Programiranje | 970 (879) | Cvenemir |
» | [C] Vsota števil v poljuOddelek: Programiranje | 1273 (1211) | Cvenemir |
» | C (Izračun povprečja)Oddelek: Programiranje | 1620 (1254) | joze67 |
» | [C] najmanjse steviloOddelek: Programiranje | 1083 (944) | BigWhale |
» | C - pomočOddelek: Programiranje | 1451 (1191) | Thagirion |