[linux/C] probleem met exevp en pthreads

Pagina: 1
Acties:

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19
Ik heb nu onderstaande code
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <pthread.h>

int common;

pthread_t   thread1;
pthread_t   thread2;

void* thread1Function(void*);
void* thread2Function(void*);


int main()
{
    int status;
    common = 0;
    if (
        pthread_create(&thread1, NULL, &thread1Function, NULL)!=-1 &&
        pthread_create(&thread2, NULL, &thread2Function, NULL)!=-1
        )
    {
        while(1)
        {
            printf("Dit is main (%d) en common is %d\n\b",getpid(),common);
            usleep(10);
        }
    }
    printf("\n\neinde\n\n\n\b");
    return 0;
}

void* thread1Function(void* x)
{
    int teller=0;
    while(teller<100)
    {
        printf("Dit is thread 1 (%d)\n",getpid());
        usleep(10);
        teller++;
        common=1;
    }
    return 0;
}


void* thread2Function(void* x)
{
    char *d2k2[50]= {"ls","-a",NULL};
    printf("Dit is thread 2 (%d) ",getpid());
    printf("2 :%s\n",d2k2[0]);
    execvp(d2k2[0],d2k2);
    return 0;
}

maar nu het probleem dat execvp nadat het uitgevoerd is niet meer terugkeert in het programma maar het programma afsluit.
Als ik system gebruik kan het wel (voor dingen die in /bin/ staan) maar ik moet dus een variabel aantal zaken runtime op kunnen geven en dan vanuit mijn programma gaan uitvoeren.
De vraag is dus: hoe kan ik dit doe?
system(ls -a); werkt niet ivm de spaties en execvp(d2k2k[0],d2k2); werkt hiervoor perfect.

Probleem zit um dus nu in thread 2 :) Ik heb het uit te voeren zooitje ff hardcoded erin gezet, *d2k2[] maar dat is dus via een andere functie (zie mijn andere thread over commandline parameters) om te zetten.

Doet iets met Cloud (MS/IBM)


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

globals waren toch vies?
</flauw>

ik begrijp je probleem niet helemaal. Wat werkt er nou niet :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • [ti]
  • Registratie: Februari 2000
  • Niet online
Ik durf het niet met zekerheid te zeggen, maar volgens mij moet je dan fork() voor je execvp() gooien.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void* thread2Function(void* x)
{
    int  pid;
    char *d2k2[50]= {"ls","-a",NULL};

    printf("Dit is thread 2 (%d) ",getpid());
    printf("2 :%s\n",d2k2[0]);

    if ( (pid=fork()) == 0)
    {
        execvp(d2k2[0],d2k2);
    }

    return 0;
}

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19
Op maandag 17 december 2001 15:17 schreef drm het volgende:
globals waren toch vies?
</flauw>

ik begrijp je probleem niet helemaal. Wat werkt er nou niet :?
globals zijn ook vies
dit is alleen maar een voorbeeldje :)

Wat er dus niet werkt is die execvp() in thread2
als die is uitgevoerd is ie helemaal uit het programma
terwijl het programma (while(1)) moet lopen.
Maar als ik system() gebruik kan ik niet via de commandline gegevens opgeven die in die system() moet worden uitgevoerd. snappu?

Doet iets met Cloud (MS/IBM)


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19
Op maandag 17 december 2001 15:18 schreef [ti] het volgende:
Ik durf het niet met zekerheid te zeggen, maar volgens mij moet je dan fork() voor je execvp() gooien.
[code]
probeer ik ff
tnx

Doet iets met Cloud (MS/IBM)


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

D2k:
globals zijn ook vies
dit is alleen maar een voorbeeldje :)
;)
Wat er dus niet werkt is die execvp() in thread2
als die is uitgevoerd is ie helemaal uit het programma
terwijl het programma (while(1)) moet lopen.
Maar als ik system() gebruik kan ik niet via de commandline gegevens opgeven die in die system() moet worden uitgevoerd. snappu?
[ti]'s verklaring lijkt me plausibel... probeer dat ff zou'k zeggen...

edit: oh, dat doe je al :D

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19
Op maandag 17 december 2001 15:18 schreef [ti] het volgende:
je bent een held
het werkt :)
Op maandag 17 december 2001 15:17 schreef drm het volgende:
globals waren toch vies?
</flauw>

ik begrijp je probleem niet helemaal. Wat werkt er nou niet :?
uiteraard is mijn programma veel groter en heb ik teneinde een werkende demo te laten zien ff wat noodgrepen gedaan :)

Doet iets met Cloud (MS/IBM)


  • [ti]
  • Registratie: Februari 2000
  • Niet online
Overigens is printf("Dit is thread 2 (%d) ",getpid()); na de fork() anders als het goed is. (maar dat had je vast al geraden ;) )

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19
Op maandag 17 december 2001 15:27 schreef [ti] het volgende:
Overigens is printf("Dit is thread 2 (%d) ",getpid()); na de fork() anders als het goed is. (maar dat had je vast al geraden ;) )
jepz
tnx voor het melden iig :)

Doet iets met Cloud (MS/IBM)


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

D2k:
uiteraard is mijn programma veel groter en heb ik teneinde een werkende demo te laten zien ff wat noodgrepen gedaan :)
uiteraard :)

edit:
ik geloof je! Waarom zou je daar over liegen :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1