» Utilizator
Salut, vizitatorule!

SkullBox este o comunitate formata din programatori si administratori de sisteme sau retele care iti sta la dispozitie cand ai o problema legata de calculatoare. Daca esti un utilizator existent, autentifica-te.

Daca nu te-ai inregistrat inca pe forum, alatura-te noua astfel marind comunitatea si ajutandu-i pe cei care au nevoie de informatii.

Daca te-ai inregistrat dar inca nu ai primit codul de activare, il poti cere aici.




Autentifica-te cu numele de utilizator si parola pentru a putea posta pe forum sau pentru a accesa ariile disponibile doar utilizatorilor inregistrati.
» Promovam
» Parteneri » Statistici
  • 59738 de mesaje.
  • 7150 de topicuri.
  • 1009 de utilizatori.
  •  
  • fiLuked e ultimul utilizator inregistrat.
[Detalii]

 
Pagini: [1]
Print
Procese.Lucru cu fisiere [378 afisari]
ale215
*


Mesaje: 97
OfflineOffline


Salutare!
Am urmatoarea problema: Scrieti un cod sursa program_apelant.c care citeste un sir de numere si calculeaza suma componentelor lui si  creeaza un proces.In procesul fiu apelati un program c:  program_apelat.c care primeste ca parametrii doua numere oarecare si un fisier.Acest program trebuie sa acalculeze suma celor doua numere si sa scrie rezultatul in fisierul dat ca parametru. In procesul parinte trebuie sa se afiseze pe ecran suma sirului citit.

Code:

// program_apelant.c

     #include "err_sys.c"
    void CitireSir(int x[100],int *lx)
    {
       printf("Lungimea sirului este ");
       scanf("%d",lx);
       for (int i=1;i<=*lx;i++)
           scanf ("%d",&x[i]);
    }

    int SumaSir(int x[100],int lx)
    {
        int i.s=0;
        for(i=1;i<=lx;i++)
           s+=x[i];
        return s;
    }

    int main()
    {
        int x[100],suma,lx,pid;
        CitireSir(x,lx);
        suma=SumaSir(x,lx);
        pid=fork();
        if (pid < 0)   err_sys("Nu pot face fork()\n");
        else
             if (pid==0)  //suntem in fiu
             {
                 ????
                 printf ("Sfarsit fiu!\n");
             }
        else
           if (pid>0)   //suntem in parinte
           {
               printf("Am creat fiul (%d)\n",pid);
               printf("%d",suma);
               printf("Sfarsit PARINTE!");
          }
    }

Code:

// program_apelat.c

#include <stdlib.h>

int main(?????????)
{
    File *rezultat;
    rezultat=fopen("E:rezultat.txt","a");
    int c;
    c=??????;
    fwrite (&c,sizeof(c),1,rezultat);
    fclose(rezultat);
}
}

Intrebarea mea este cum transmit din program_apelant numerele si fisierul in care se va scrie suma lor.Mai exact care din cele 8 (cred ca 8 sunt) "exec", si cum ar arata mainul de la program_apelat.

Multumesc!
Logged

24-05-2009, 10:04 Twitt ::
ale215
*


Mesaje: 97
OfflineOffline


inteleg ca este inceput de saptamana, dar chiar nici un raspuns?Laughing
Logged

25-05-2009, 11:56 Twitt ::
Claudiu
*


Mesaje: 1368
OfflineOffline

WWW

Ti-as raspunde, dar nu am facut niciodata asa ceva, nu am avut nevoie, nu mi s-a cerut Smile E interesant ce vrei sa faci tu, va raspunde cineva care stie Tongue
Logged

25-05-2009, 13:31 Twitt ::
astan
*


Mesaje: 737
OfflineOffline


De exemplu poti folosi execv. Sau, daca vrei ca numele executabilului pe care ai de gand sa il rulezi sa fie cautat in PATH, poti folosi execvp.
Procesul parinte poate transmite informatiile catre procesul copil printr-un pipe, de exemplu, daca asta era intrebarea ta.
Procesul parinte trebuie sa astepte terminarea procesului copil folosind o functie precum wait() (sau o varianta a ei) sau waitpid(). Altfel te poti trezi ca ramai cu procese zombie. Tu nu faci asta.

Un rezumat:
- creezi un pipe
- in main se executa fork()
- ai doua procese: parinte si copil
- procesul parinte scrie in pipe informatiile necesare procesului copil (doua numere si un nume de fisier)
- procesul copil citeste din pipe informatiile trimise de catre procesul parinte
- procesul copil foloseste una din variantele de functie exec si lanseaza in executie fisierul executabilul al carui nume a fost trimis de catre procesul parinte, cu argumentele trimise
- parintele asteapta sa se termine executia copilului apeland wait() sau una din variante, sau waitpid()
Parintele poate fi si notificat asincron cand se termina executia procesului copil, doarece se emite un semnal SIGCHLD, pentru care poate sa inregistreze un signal handler. Iar in signal handler sa apeleze wait() sau waitpid()

BTW, vezi ca nu postezi unde trebuie. Intrebarile de programare C se pun aici: http://www.skullbox.info/6/

Codul scris de tine mai sus arata neintelegerea unor concepte de baza privind programarea C. Sugerez sa te concentrezi mai mult pe studiul limbajului.
Logged
25-05-2009, 20:02 Twitt ::
Reclama
VIP

Hosting

Mesaje: 25.90
OnlineOnline

WWW
 

   Pe ABCDomenii: 250MB spatiu + 20GB trafic + 5 subdomenii = 0.95 €
 
 

The problem with troubleshooting is that trouble shoots back.
Azi 
Pages: [1]
Print
SkullBox Forum  |  Administrare, configurare si intretinere  |  Sisteme de operare  |  Topic: Procese.Lucru cu fisiere
Jump to: