PDA

View Full Version : [C] Funzioni fork(), kill(), wait() su windows ???


anx721
07-11-2004, 15:13
Salve,

come faccio ad usare queste funzioni su windows? Sto usando mingw come compilatore, conoscete delle librerie che implementano queste funzioni per windows?

Ciao e grazie.

honny
07-11-2004, 15:54
prova a cercare :

"spawnl" e "execl" nell' msdn .

71103
07-11-2004, 19:27
Originariamente inviato da anx721
Salve,

come faccio ad usare queste funzioni su windows? Sto usando mingw come compilatore, conoscete delle librerie che implementano queste funzioni per windows?

kill -> TerminateProcess
wait -> Sleep(Ex) oppure WaitForSingleObject (ad esempio con un waitable timer)
fork non so a cosa serva :D :P :P :P

P.S.: ovviamente devi includere <windows.h>, e comunque tieni presente che le funzioni standard del C sono implementate anche sotto Windows ;)

71103
07-11-2004, 19:32
con una rapida googlata ho visto il significato di fork; non credo che esista un equivalente Win32, ma (se ho ben capito il funzionamento di fork) puoi utilizzare i threads (vd. CreateThread).

anx721
07-11-2004, 19:41
A me serve creare un nuovo processo perche le operazioni che devo svolgere in questo processo possono provocare un segmentation fault che farebbe crashare tutto il programma, mentre cosi crasha solo quel processo; le funzioni tipo execl guardando il prototipo mi pare che servano ad eseguire un processo passando come argomento il path del processo da eseguire, cioè il processo si basa su un eseguibile già presente sul disco, mentre io vorrei creare un processo da programma, cosi come creo un thread, solo che voglio che abbia il proprio spazio di memoria, separato da quello del processo principale.

ilsensine
08-11-2004, 08:39
Originariamente inviato da anx721
A me serve creare un nuovo processo perche le operazioni che devo svolgere in questo processo possono provocare un segmentation fault che farebbe crashare tutto il programma, mentre cosi crasha solo quel processo; le funzioni tipo execl guardando il prototipo mi pare che servano ad eseguire un processo passando come argomento il path del processo da eseguire, cioè il processo si basa su un eseguibile già presente sul disco, mentre io vorrei creare un processo da programma, cosi come creo un thread, solo che voglio che abbia il proprio spazio di memoria, separato da quello del processo principale.
fork non esiste su architetture win32, e non è implementabile così come definita dagli standard unix.
Forse cygwin ne fornisce una sorta di emulazione, non so quanto buona. Dai una occhiata.

Nota che il 99.9% delle volte, l'uso della fork è associato a una exec, quindi non ci sono molti problemi a trasferire queste funzionalità su win32 (basta usare CreateProcess). Non so se quelli di cygwin siano riusciti ad emulare una fork 100% compatibile unix.

anx721
08-11-2004, 12:45
Ma le funzioni come createProcess vogliono tutte come parametro il percorso all'eseguibile da eseguire...io non voglio dar vita ad un processo per un eseguibile gia esistente, voglio solo peter eseguire in un nuovo processo alune righe di codice del mio programma; l'unico escamotage mi pare fare creare un nuovo processo sul mio programma stesso, ma a differeza della fork con la quale l'esecuzione del nuovo processo creato riprende dal punto in cui e stata eseguita la fork, con createProcess mi verrebe eseguito tutto il programma dall'inizio.

ilsensine
08-11-2004, 14:01
Infatti ho detto che fork+exec è equivalente a CreateProcess.
Non esiste nulla di simile a fork su win32, prova a vedere se Cygwin offre una emulazione decente a fork (dubito).