Ik heb nu onderstaande code
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.
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
Doet iets met Cloud (MS/IBM)