19spike83
05-02-2008, 13:02
Salve ragazzi , ho un problema a compilare un esercizio in c , sono neofita in linux , ho guardato in giro i commenti per gli errori ma non riesco a scapparci fuori , forse mancano le librerie ??
quali librerie mancano ?? posix ?? come faccio a installarle ??
ci sarebbe un modo di compilare tutto sotto windows con microsof visual strudio ??
con visual studio mi dice quando compilo : Cannot open include file: 'semaphore.h': No such file or directory
compilando con gcc sotto ubuntu , faccio
gcc file.c
warning: no newline at end of file
/tmp/ccKWOzjo.o: In function `coordinatore':
monitor.c:(.text+0x2c4): undefined reference to `pthread_create'
monitor.c:(.text+0x31a): undefined reference to `pthread_join'
monitor.c:(.text+0x347): undefined reference to `pthread_create'
monitor.c:(.text+0x39f): undefined reference to `pthread_create'
monitor.c:(.text+0x3e6): undefined reference to `pthread_join'
monitor.c:(.text+0x3f8): undefined reference to `pthread_join'
collect2: ld returned 1 exit status
altrimenti ho provato
gcc file.c -o file -lpthread
warning : no newline at end of file
questo è il file che devo compilare :
Come mi devo comportare ??
Mi basterebbe riuscire a compilarlo e dopo lo adatterei alle mie esigenze ............
Grazie per qualsiasi aiuto.
#include <stdio>
#include <stdlib>
#include <windows>
#include <pthread>
#include <semaphore>
#define MAX_SPALATORI 5 //SPALATORI
#define MAX_PALE 2 //PALE
#define MAX_GUANTI 5 //GUANTI sempre in numero pari
#define RALLENTA 40000000 //variabile per rallentare
#define SPALATE 3
pthread_mutex_t prendi,rilascia; //mutex per acquisire o rilasciare i 2 tipi di risorse in mutua esclusione
pthread_mutex_t mutex; //mutex utilizzato UNICAMENTE per l'accesso in mutua esclusione al buffer di output (per mantenere formattato l'output)
sem_t guanti; //semafori inizializzati a G
sem_t pale; //semafori inizializzati a P
void attesa();
void *spalatore(void *arg)
{
int i;
//while(1)
for(i=0; i<SPALATE; i++)
{
pthread_mutex_lock(&mutex);
printf("\nSpalatore n. %d :bevo il caffe\'\n.",arg); //BEVE IL CAFFE
attesa();
pthread_mutex_unlock(&mutex);
pthread_mutex_lock(&prendi);
sem_wait(&guanti); //afferra il guanto destro
sem_wait(&guanti); //afferra il guanto sinistro
sem_wait(&pale); //afferra la pala
pthread_mutex_unlock(&prendi);
pthread_mutex_lock(&mutex);
printf("\nSpalatore n. %d : Ho preso guanti e pala!! vado a spalare la neve\n",arg); //FA QUALCOSA (spala la neve)
attesa();
pthread_mutex_unlock(&mutex);
pthread_mutex_lock(&rilascia);
sem_post(&guanti); //rilascia il guanto destro
sem_post(&guanti); //rilascia il guanto sinistro
sem_post(&pale); //rilascia la pala
pthread_mutex_unlock(&rilascia);
}
return NULL;
}
void main()
{
char i;
void* ret;
pthread_t spalatori[MAX_SPALATORI];
pthread_mutex_init(&mutex,NULL); //INIZIALIZZO I SEMAFORI
pthread_mutex_init(&prendi,NULL);
pthread_mutex_init(&rilascia,NULL);
sem_init(&guanti,0,MAX_GUANTI);
sem_init(&pale,0,MAX_PALE);
attesa();
printf(" ORE 7:30\n\nGli spalatori sono arrivati nel cortile e vanno tutti a prendersi un caffe\'\n\n");
attesa();
printf("Ci sono %d spalatori, %d pale e %d paia di guanti\n\n", MAX_SPALATORI, MAX_PALE+1, MAX_GUANTI+1);
attesa();
for (i=0;i<MAX_SPALATORI;i++) //CREO I THREAD
{
if (pthread_create(&spalatori[i], NULL, spalatore, (void*)i)<0)
{
fprintf(stderr,"ERRORE!!");
exit(1);
}
}
for (i=0;i<MAX_SPALATORI;i++)
{
pthread_join(spalatori[i],&ret);
}
/*
pthread_mutex_destroy(&mutex); // DISTRUGGO TUTTI I SEMAFORI
pthread_mutex_destroy(&prendi);
pthread_mutex_destroy(&rilascia);
sem_destroy(&guanti);
sem_destroy(&pale);
////////////////////inizia il pomeriggio//////////////////////////////////
pthread_mutex_init(&mutex,NULL); //INIZIALIZZO I SEMAFORI
pthread_mutex_init(&prendi,NULL);
pthread_mutex_init(&rilascia,NULL);
sem_init(&guanti,0,MAX_GUANTI-1);
sem_init(&pale,0,MAX_PALE-1);
*/
for (i=0; i<MAX_SPALATORI; i++)
{
attesa();
printf("\nSpalatore n. %d :bevo il caffe\'\n.",i);
}
attesa();
printf("\n ORE 12.00\n\nPausa Pranzo, gli spalatori se ne vanno in mensa\n");
attesa();
printf("\n ORE 14.00\n\nEcco gli spalatori di ritorno, ora un caffe\' e poi al lavoro!!\n");
attesa();
for (i=0;i<MAX_SPALATORI;i++) //CREO I THREAD
{
if (pthread_create(&spalatori[i], NULL, spalatore, (void*)i)<0)
{
fprintf(stderr,"ERRORE!!");
exit(1);
}
}
for (i=0;i<=MAX_SPALATORI;i++)
{
pthread_join(spalatori[i],&ret);
}
for (i=0; i<MAX_SPALATORI; i++)
{
attesa();
printf("\nSpalatore n. %d :bevo il caffe\'\n.",i);
}
printf("\n ORE 17.00\n\nOTTIMO LAVORO!!\n\n La giornata e\' finita... gli spalatori se ne tornano a casa!!\n\n");
system("pause");
pthread_mutex_destroy(&mutex); // DISTRUGGO TUTTI I SEMAFORI
pthread_mutex_destroy(&prendi);
pthread_mutex_destroy(&rilascia);
sem_destroy(&guanti);
sem_destroy(&pale);
}
void attesa()
{
int j;
for(j=0; j<RALLENTA; j++) // ciclo per rallentare la visione in output
{
}
}
quali librerie mancano ?? posix ?? come faccio a installarle ??
ci sarebbe un modo di compilare tutto sotto windows con microsof visual strudio ??
con visual studio mi dice quando compilo : Cannot open include file: 'semaphore.h': No such file or directory
compilando con gcc sotto ubuntu , faccio
gcc file.c
warning: no newline at end of file
/tmp/ccKWOzjo.o: In function `coordinatore':
monitor.c:(.text+0x2c4): undefined reference to `pthread_create'
monitor.c:(.text+0x31a): undefined reference to `pthread_join'
monitor.c:(.text+0x347): undefined reference to `pthread_create'
monitor.c:(.text+0x39f): undefined reference to `pthread_create'
monitor.c:(.text+0x3e6): undefined reference to `pthread_join'
monitor.c:(.text+0x3f8): undefined reference to `pthread_join'
collect2: ld returned 1 exit status
altrimenti ho provato
gcc file.c -o file -lpthread
warning : no newline at end of file
questo è il file che devo compilare :
Come mi devo comportare ??
Mi basterebbe riuscire a compilarlo e dopo lo adatterei alle mie esigenze ............
Grazie per qualsiasi aiuto.
#include <stdio>
#include <stdlib>
#include <windows>
#include <pthread>
#include <semaphore>
#define MAX_SPALATORI 5 //SPALATORI
#define MAX_PALE 2 //PALE
#define MAX_GUANTI 5 //GUANTI sempre in numero pari
#define RALLENTA 40000000 //variabile per rallentare
#define SPALATE 3
pthread_mutex_t prendi,rilascia; //mutex per acquisire o rilasciare i 2 tipi di risorse in mutua esclusione
pthread_mutex_t mutex; //mutex utilizzato UNICAMENTE per l'accesso in mutua esclusione al buffer di output (per mantenere formattato l'output)
sem_t guanti; //semafori inizializzati a G
sem_t pale; //semafori inizializzati a P
void attesa();
void *spalatore(void *arg)
{
int i;
//while(1)
for(i=0; i<SPALATE; i++)
{
pthread_mutex_lock(&mutex);
printf("\nSpalatore n. %d :bevo il caffe\'\n.",arg); //BEVE IL CAFFE
attesa();
pthread_mutex_unlock(&mutex);
pthread_mutex_lock(&prendi);
sem_wait(&guanti); //afferra il guanto destro
sem_wait(&guanti); //afferra il guanto sinistro
sem_wait(&pale); //afferra la pala
pthread_mutex_unlock(&prendi);
pthread_mutex_lock(&mutex);
printf("\nSpalatore n. %d : Ho preso guanti e pala!! vado a spalare la neve\n",arg); //FA QUALCOSA (spala la neve)
attesa();
pthread_mutex_unlock(&mutex);
pthread_mutex_lock(&rilascia);
sem_post(&guanti); //rilascia il guanto destro
sem_post(&guanti); //rilascia il guanto sinistro
sem_post(&pale); //rilascia la pala
pthread_mutex_unlock(&rilascia);
}
return NULL;
}
void main()
{
char i;
void* ret;
pthread_t spalatori[MAX_SPALATORI];
pthread_mutex_init(&mutex,NULL); //INIZIALIZZO I SEMAFORI
pthread_mutex_init(&prendi,NULL);
pthread_mutex_init(&rilascia,NULL);
sem_init(&guanti,0,MAX_GUANTI);
sem_init(&pale,0,MAX_PALE);
attesa();
printf(" ORE 7:30\n\nGli spalatori sono arrivati nel cortile e vanno tutti a prendersi un caffe\'\n\n");
attesa();
printf("Ci sono %d spalatori, %d pale e %d paia di guanti\n\n", MAX_SPALATORI, MAX_PALE+1, MAX_GUANTI+1);
attesa();
for (i=0;i<MAX_SPALATORI;i++) //CREO I THREAD
{
if (pthread_create(&spalatori[i], NULL, spalatore, (void*)i)<0)
{
fprintf(stderr,"ERRORE!!");
exit(1);
}
}
for (i=0;i<MAX_SPALATORI;i++)
{
pthread_join(spalatori[i],&ret);
}
/*
pthread_mutex_destroy(&mutex); // DISTRUGGO TUTTI I SEMAFORI
pthread_mutex_destroy(&prendi);
pthread_mutex_destroy(&rilascia);
sem_destroy(&guanti);
sem_destroy(&pale);
////////////////////inizia il pomeriggio//////////////////////////////////
pthread_mutex_init(&mutex,NULL); //INIZIALIZZO I SEMAFORI
pthread_mutex_init(&prendi,NULL);
pthread_mutex_init(&rilascia,NULL);
sem_init(&guanti,0,MAX_GUANTI-1);
sem_init(&pale,0,MAX_PALE-1);
*/
for (i=0; i<MAX_SPALATORI; i++)
{
attesa();
printf("\nSpalatore n. %d :bevo il caffe\'\n.",i);
}
attesa();
printf("\n ORE 12.00\n\nPausa Pranzo, gli spalatori se ne vanno in mensa\n");
attesa();
printf("\n ORE 14.00\n\nEcco gli spalatori di ritorno, ora un caffe\' e poi al lavoro!!\n");
attesa();
for (i=0;i<MAX_SPALATORI;i++) //CREO I THREAD
{
if (pthread_create(&spalatori[i], NULL, spalatore, (void*)i)<0)
{
fprintf(stderr,"ERRORE!!");
exit(1);
}
}
for (i=0;i<=MAX_SPALATORI;i++)
{
pthread_join(spalatori[i],&ret);
}
for (i=0; i<MAX_SPALATORI; i++)
{
attesa();
printf("\nSpalatore n. %d :bevo il caffe\'\n.",i);
}
printf("\n ORE 17.00\n\nOTTIMO LAVORO!!\n\n La giornata e\' finita... gli spalatori se ne tornano a casa!!\n\n");
system("pause");
pthread_mutex_destroy(&mutex); // DISTRUGGO TUTTI I SEMAFORI
pthread_mutex_destroy(&prendi);
pthread_mutex_destroy(&rilascia);
sem_destroy(&guanti);
sem_destroy(&pale);
}
void attesa()
{
int j;
for(j=0; j<RALLENTA; j++) // ciclo per rallentare la visione in output
{
}
}