View Full Version : programmazione multiprocessing in C (unix,fork ect)
ragazzi ho un problema grandissimo!!
sto seguendo sistemi operativi all università, vorrei studiare pure ed esercitarmi sulle fork, processi padri processi figli........boh.......diciamo che in linea teorica ho capito, solo che in pratica non mi funziona niente!! prova a utilizzare fork sotto windows e non riesco neanche a compilare (
[Linker error] undefined reference to `fork' , uno dei tanti) vado sotto unix (linux red hat) ed è peggio ancora......ma c è qualche metodo particolare per compilare in C? prima con il turbo pascal facevo compile e poi run e tutto funzionava!!:cool:
neanche a dire che è sbagliato il codice perchè copio ed incollo codici già fatti!!! ma che devo fare?
qualcuno mi potrebbe spiegare passo passo una compilazione e basta!?
grazie anticipate!
Sotto Windows non c'è la fork (a meno di compilare sotto certi "emulatori" di sistemi Unix)...
Sotto Linux che problemi hai ?
sotto linux escono molti errori tipo "fork non dichiarata" e altri.......
ma per compilare e poi far partire il progammino, devo salvarlo come .c da qualsiasi editor e poi da terminale utilizzo cc o gcc con il nome del file?.....o no?
possibile che non riesco a trovare una guida che mi spieghi come fare???
ma posso scrivere anche direttamente da terminale il codice?
che casino:confused:
scusami per il disturbo!
per compilare con gcc si fa così di solito..
gcc –o nomefilecompilato filesorgente.c
ciao :)
Per utilizzare le funzioni come la fork, o la signal, o la wait, devi includere i relativi header.
Ad esempio:
/* USO DELLA EXEC: exec-copy.c */
#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<signal.h>
main(argc,argv)
int argc;
char *argv[];
{
int i,n,w;
n = fork();
if (n == -1)
{
fprintf(stderr,"fork fallita\n");
fflush(stdout);
exit(1);
}
else if ( n == 0) /* processo figlio */
{
printf("So er figlio e` %d\n",getpid());
printf("(figlio) ora aspetto 3 secondi e poi invio una signal a papà %d\n",getppid());
fflush(stdout);
for (i=0; i<3; i++)
{
system("sleep 1");
printf(".\n");
}
execl("/usr/bin/cp","/usr/bin/cp",argv[1],argv[2],0);
kill(getppid(),SIGKILL);
printf("(figlio) ho finito e muoio\n");
exit(0);
}
else /* processo padre */
{
signal(SIGKILL,SIG_DFL);
printf("il mio numero (padre) e` %d\n",getpid());
printf("(padre) ora incomincio le mie operazioni\n");
for (i = 0; i < 6; i++)
{
system("sleep 1");
printf("*\n");
}
printf("(padre) ora muoio anch'io\n");
exit(0);
}
}
Sotto windows non puoi utilizzarle, se a casa hai un PC Windows ti consiglio di utilizzare una distro live bootabile da cd, come ad esempio Knoppix che ti prmette di utilizzare Linux senza installare nulla sul disco fisso.
Un buon link per l'IPC (Inter-Process-Comunication): http://www.lilik.it/~mirko/gapil/gapilch4.html#x69-450003
ragazzi grazie per l aiuto finalmente sono riuscito a compilare...il problema è che non mettevo l header types.h e quindi non mi riconosceva il tipo pid!
cmq cavoli ma siete informatici? come fate a sapere tutte queste cose? non mi dite che siete autodidatti............!!!!:)
Personalmente mi sto interessando seriamente del C e dell 'IPC da poco, ma son queste le cose che ti faranno diventare un vero informatico ;)
ma mica sai come rendere visibili le altre partizioni su linux...ho la red hat 9.0 e non mi vede nessun altra partizione, presumo si debba montare......ma come? addirittura col cd di knoppix le monta automaticamente!!! qui no!
il problema è che ho tutto il materiale di appunti ect su win98 e ogni volta per vedere qualcosa devo riavviare.......mica mi potreste spiegare come faccio per vedere ciò che ho sul 98?
ma per quanto riguarda l emulatore, posso utilizzare tutto ciò che unix offre? quindi librerie editor ect?
Dovrai editare il file /etc/fstab...ma questo è meglio che lo chiedi nella sezione Linux...
Knoppix è una distro, ovvero una raccolta di programmi...ovviamente il tutto è limitato dalla dimensione fisica di un cd, ma a dirti il vero io non ho trovato nulla che mancasse per un uso home-scolastico, compreso OpenOffice ;)
Sotto windows devi usare funzioni tipo CreateProcess o simili, puoi trovare qualche info con win32 sdk...
Se qualcuno di voi ha qualche buon link sulla programmazione dei thread lo posti per favore.
Ciao ;)
http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html
grazie, cmq avevo detto sotto windows ;)
Originariamente inviato da gokan
grazie, cmq avevo detto sotto windows ;)
letto male, sorry:(
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.