|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6668
|
[C]Modifiche non viste a variabili extern
Salve ragazzi,
ho bisogno di una rinfrescata riguarda la keyword extern del C. Allora, ho scritto un programma che ne richiama un altro mediante system. Lo chiamo file1. In file1 ho dichiarato una variabile intera globale. Ora, prima di invocare system e quindi l'altro programma(file2), setto questo intero ad un valore. Subito dopo faccio la system("Nome programma"). In file2 ho dichiarato tale intero come extern, ed ho incluso l'header di file1. Il problema è che file2 non vede la modifica fatta su tale intero in quanto per lui vale sempre 0. Sicuramente è una cavolata, ma non mi ricordo.. Grazie. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1455
|
Quote:
Se chiami una system("blah"), stai cancellando lo spazio di esecuzione dell'eseguibile e rimpiazzandolo con uno nuovi, quindi mi pare del tutto ovvio che perdi i riferimenti alle variabili ecc. Prova ad utilizzare fork/thread.
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6668
|
Quote:
|
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1455
|
Quote:
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Il fatto è che non funziona perchè i due sono processi diversi e come tali non condividono lo spazio di memoria nella quale la variabile extern è allocata. Per fare quello che chiedi con la system (o con fork-exec) devi usare qualche tipo di comunicazione interprocesso, come ad esempio una named pipe o FIFO. Se invece lo vuoi realizzare con fork, i tuoi programmi devono risedere nello stesso sorgente (e quindi eseguibile) e dopo la fork puoi usare i file descriptor forniti da una pipe aperta prima della fork. |
|
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
|
Quote:
Quote:
|
||
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1455
|
Quote:
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6668
|
Ho bisogno di passare al programma chiamato con system una matrice di interi. Poi tale array è modificato e ripassato indietro al programma chiamante. Forse faccio prima ad usare un semplice file. Scrivo nel file prime della system ed in seguito il programma chiamato legge tale file. O forse fa al caso mio la funzione FILE * popen (const char *command, const char *mode).
Solo che non ho capito come passargli tale matrice. Ultima modifica di Unrue : 29-12-2006 alle 09:59. |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1455
|
Quote:
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6668
|
Mai usata..
Dunque, io ho scritto questo: Codice:
#include <stdio.h>
#include <errno.h>
int main(void);
static FILE* alfiglio;
#define BSIZE 30
static char buf_padre[BSIZE]="Ciao";
/* main definition */
int main() {
if ((alfiglio=popen("NomeProgramma","w"))==NULL) {
/* Error */
printf("Internal error: %d\n", errno);
exit(-1);
}
fprintf(alfiglio,"%s\n",buf_padre);
pclose(alfiglio);
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:28.



















