Newsgroup: it.comp.lang.c
Titolo: richiamare system piu volte

salve a tutti,stavo giocherellando con le funzioni,per capirne un po di 
piu..
ho provato a fare questo codice che dovrebbe aprirmi 2 notepad,ma ne apre 
uno alla volta,solo quando chiudo il primo compare il secondo.come si fa ad 
aprirne 2 contemporaneamente?
 
 
#include<stdio.h>
#include<stdlib.h>
void fallo(){
system("notepad.exe");
}
int main(){
fallo();
fallo();
}
 
ringrazio anticipatamente! 
 
 
 
--- Posted via news://
freenews.netfront.net/
 - Complaints to 
ne...@netfront.net
 ---


provo a buttarla li...
con i thread? fallo diventa un thread...
 
-- 
Ciao!
Nobuteru
Jabber ID 
nobu...@jabber.org
 
Download free Jabber client from 
www.jabber.org
 

 }
 
Prova in questo modo:
 
#include<stdio.h>
#include<stdlib.h>
int fallo()
{
   int pid;
   pid = fork();   /* crea nuovo processo */
   if (pid == 0) { /* processo figlio */
      system("notepad.exe");
      exit (0);
   } else
      return pid;
}
int main()
{
   int figlio1, figlio2, status;
 
    figlio1 = fallo();
    figlio2 = fallo();
    waitpid(figlio1, &status, 0);
    waitpid(figlio2, &status, 0);
    return 0;
}
 
Puoi addirittura terminare subito il processo padre rimuovendo le 
waitpid() ma per pulizia è preferibile aspettare che i figli terminino.
 
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   < 
http://giovanni.homelinux.net/
 >
 


 
La system ritorna quando il comando è completato, e fare quello che
vuoi non credo sia in alcun modo portabile.
Anche se non ho provato suppongo che su macchine *nix basti chiedere
di mandare in background con un '&', visto che l'argomento di system
viene passato al /bin/sh.
Su macchine windows direi di lasciar proprio perdere la system() e
usare la loro CreateProcess() o come diavolo l'hanno chiamata.
Ciao!


mmh.. solo *molto* dubbioso per questa cosa..
Per farla alla vecchia maniera unix direi di levare la system() e
mettere la exec() per evitare la creazione della subshell, altrimenti
tanto vale togliere tutto e utilizzare solo la popen().
Ciao!

 ringrazio anticipatamente!
 
Per farlo in C _devi_ usare necessariamente thread o processi.
Se vuoi continuare ad utilizzare system(), affidati al sistema
operativo. In ambiente Windows per eseguire un programma puoi
sfruttare il comando START del prompt dei comandi:
 
for (i=0; i<10; i++) {
  system("cmd.exe /C \"START notepad.exe\"");
 
In questo modo esegui 10 notepad.exe contemporaneamente.

 
 
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
 
#define PROGNAME "notepad"
 
pthread_t th1,th2;
 
void* th_fallo(void *par){
	system(PROGNAME);
}
 
int main(int argc, char** argv){
 
	pthread_create(&th1,NULL,th_fallo,NULL);
	pthread_create(&th2,NULL,th_fallo,NULL);
 
	pthread_join(th1,NULL);
	pthread_join(th2,NULL);
 
	return(EXIT_SUCCESS);


 
 
Non usare system, ma spawn.
spawn è definita dallo standard POSIX per sistemi UNIX, ma è disponibile 
anche su Windows.
 
http://en.wikipedia.org/wiki/Spawn_(computing)
 
http://msdn.microsoft.com/en-us/library/20y988d2(VS.71).aspx
 
 
Chiamala con il flag P_NOWAIT, e controlla il valore restituito.
 
 
 
Ciao  Manlio


bel trucchetto,non sapevo si potesse farlo,ho letto nell help di cmd      /C 
dice: esegue il comando e termina:)
invece su linux ho fatto come diceva  lutente ftM
cioe con &
system ("notepad &notepad");
le chiamate createprocess e spawn devo studiarle per bene....sono ancora 
mooolto nubbio in materia
grasie... 
