» Utilizator
LAMP
» Parteneri» De citit» Recomandari» Taskuri securitate » Statistici
  • 64782 de mesaje.
  • 7635 de topicuri.
  • 1081 de utilizatori.
  •  
  • purcelllefevreo e ultimul utilizator inregistrat.
[Detalii]

 

| |
Pagini: [1]
Print

Procese.Lucru cu fisiere [460 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: 1537
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: 766
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 ::
Pagini: [1]
Print
SkullBox Forum  |  Administrare, configurare si intretinere  |  Sisteme de operare  |  Topic: Procese.Lucru cu fisiere