Forum Informatica Unict

Vecchi ordinamenti ad esaurimento => Sistemi Distribuiti 1 => Topic started by: Pandemia000 on 06-02-2009, 22:11:27



Title: problema esecuzione programmi c linux
Post by: Pandemia000 on 06-02-2009, 22:11:27
Ciao ragazzi, sto da poco programmando in c in ambiente linux, e sto utilizzando Scite come editor. Riesco a compilare il codice, ma quando decido di avviarlo mi da l'errore

Code:
sh: ./nomefile: not found

Decido così di usare la shell e digito

Code:
gcc nomefile.c
./nome file

ma qui mi da l'errore accesso negato. Sapete dirmi in cosa sbaglio ? Approfitto del post per postare un pò di codice che ho scritto. Ciao grazie.

Code:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>


int main (void)
{
int sk;
struct sockaddr_in client;
struct sockaddr_in server;
int clientaddr_size;
int client_connect;
char data[8000];
char response[]="Messaggio ricevuto";
unsigned short port=9000;
server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=INADDR_ANY;
if((sk=socket(AF_INET,SOCK_STREAM,0))<0)
  { 
printf("Errore di creazione socket\n");
exit(-1);
  }
if((bind(sk, (struct sockaddr *) &server, sizeof(server)))<0)
{printf("Errore di collegamento socket\n");
exit(-1);}
listen(sk,20);
while(1)
{
   if((client_connect=accept(sk,(struct sockaddr *) &client,&clientaddr_size))<0)
   {printf("Errore nell'accettare la connessione\n"); exit(-1);}
    recv(client_connect,data,sizeof(data),0);
    printf("Ho ricevuto: %s", data);
    send(client_connect,response,sizeof(response),0);
    close(client_connect);   
}
exit(0);
}

Code:
#include <sys/types.h>
#include<sys/socket>
#include <stdio.h>
#include <netdb.h>


int main( char[15] ip)
{
int socket;
struct sockaddr_in server;
unsigned short port=9000;
char messaggio[300];

server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=inet_aton(ip);

if((socket=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("Errore creazione socket");
exit(-1);
}
if(connect(socket,(struct sockaddr*)&server,sizeof(server))<0)
{
printf("Errore connesione");
exit(-1);
}
int i=0;
while(i<10)
{
  send(socket,"invio di dati",strlen("invio di dati")+1,0;
  recv(socket,messaggio,sizeof(messaggio));
  i++;
}
close(socket);
exit(0);


}





Title: Re:problema esecuzione programmi c linux
Post by: Acicatena86 on 06-02-2009, 23:45:47
prova a fare così

Code:
gcc nomefile.c  -o nomefile.o

./nomefile


Title: Re:problema esecuzione programmi c linux
Post by: KingDavid on 07-02-2009, 00:29:08
Puoi scaricare geany è un text editor che ti compila il tutto con un semplice click ad un bottone. Inoltre ti fa vedere come compila, cioè quali comandi usa per compilare il file sorgente.


Title: Re:problema esecuzione programmi c linux
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 07-02-2009, 02:36:41
Soprattutto ricordati di dare il permesso di esecuzione al tuo programma, dopo che l'hai creato:
Code:
chmod +x nomefile
#oppure
chmod +x nomefile.o


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 07-02-2009, 10:05:30
proverò così allora grazie mille ragazzi!!


Title: Re:problema esecuzione programmi c linux
Post by: nessunoHaStoNick® on 07-02-2009, 10:14:35
Soprattutto ricordati di dare il permesso di esecuzione al tuo programma, dopo che l'hai creato:
Code:
chmod +x nomefile
#oppure
chmod +x nomefile.o

non mi è mai servito  .huh


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 07-02-2009, 10:57:41
Soprattutto ricordati di dare il permesso di esecuzione al tuo programma, dopo che l'hai creato:
Code:
chmod +x nomefile
#oppure
chmod +x nomefile.o

niente da fare mi ritorna nel promtp provo con geany


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 07-02-2009, 11:01:51
Soprattutto ricordati di dare il permesso di esecuzione al tuo programma, dopo che l'hai creato:
Code:
chmod +x nomefile
#oppure
chmod +x nomefile.o

niente da fare mi ritorna nel promtp provo con geany

come non detto funziona forse è il codice che ha qualche problema


Title: Re:problema esecuzione programmi c linux
Post by: KingDavid on 07-02-2009, 11:45:31
posta il codice


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 07-02-2009, 11:46:23
l'errore che restituisce il programma è segmentation fault; in pratica io vorrei che il mio client prendesse come parametro l'indirizzo del server a cui collegarsi. Ho realizzato la struttura così:

Code:

int main(char * argv[])
{
int sk;
struct sockaddr_in server;
struct in_addr sa;
unsigned short port=9000;
char messaggio[300];
inet_aton(argv[1],&sa);  //converto la stringa in struct in_addr
server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr=sa;  //assegno l'indirizzo ip alla struct sockaddr
....
........

non riesco a capire l'errore ( o la bestialità) che ho commesso. Avete qualche idea ?


Title: Re:problema esecuzione programmi c linux
Post by: Acicatena86 on 07-02-2009, 11:56:10
L'errore credo sia qui

Code:
inet_aton(argv[1],&sa); 
Poichè stai sovrascrivendo l'indirizzo (il puntatore) di sa.

Se non scrivo cavolate pure io :

Dovresti mettere così 
Code:
inet_aton(argv[1],&sa.sin_addr); 


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 07-02-2009, 12:01:43
L'errore credo sia qui

Code:
inet_aton(argv[1],&sa); 
Poichè stai sovrascrivendo l'indirizzo (il puntatore) di sa.

Se non scrivo cavolate pure io :

Dovresti mettere così 
Code:
inet_aton(argv[1],&sa.sin_addr); 


così non me lo fa compilare perchè non trova il membro sin_addr.


Title: Re:problema esecuzione programmi c linux
Post by: Acicatena86 on 07-02-2009, 12:04:52
Scusa per la domanda #@!!01Z#@!!@$^, ma tu lo passi l'indirizzo?

Cioè fai una cosa del tipo 
Code:
./nomefile  127.0.0.1
??


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 07-02-2009, 12:20:05
si faccio esattamente come hai scritto. Ho consultato lo stevens, q da quanto scritto nel libro, per convertire una stringa in un indirizzo a 32 bit devo utilizzare la function inet_addr.Dunque scrivo:
Code:

server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=inet_addr(argv[0]);



a questo punto la struct dovrebbe essere completa. Però continua a darmi quell'errore, forse il problema è nel passaggio dei parametri al main.



Title: Re:problema esecuzione programmi c linux
Post by: Acicatena86 on 07-02-2009, 12:29:53
Questo è un server in c fatto da me. Confrontalo e vedi dove è l'errore


Code:

#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<time.h>


#define PORT 2000
#define LOCIP  "127.0.0.1"
#define MAXCODA 1000


int main()
{

struct sockaddr_in my_addr,far_addr;
int socket_p,clone;
char nick_name[128];
char mess[50];
int dim=sizeof(struct sockaddr_in);
int retcode;

my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(PORT);
inet_aton(LOCIP,&my_addr.sin_addr);

socket_p=socket(PF_INET,SOCK_STREAM,0);

if(socket_p==-1)
{
printf("Errore nella creazione della socket");
exit(-1);
}

int b=bind(socket_p,(struct sockaddr_in*)&my_addr,dim);


if(b==-1)
{
printf("Errore nella bind");
exit(-2);
}


        printf("Ciao sono il server!!\n");
listen(socket_p,MAXCODA);

while( (clone=accept(socket_p,(struct sockaddr_in*)&far_addr,&dim))!=-1)
{
printf("Connesso a %s \n",inet_ntoa(far_addr.sin_addr));


if((retcode=read(clone,nick_name,sizeof(nick_name)))==-1)
{
printf("Errore nella read \n");
exit(-3);
}


        srand(time(NULL));
int numberS=(int)((random()%100)+1);

sprintf(mess,"Il tuo numero identificativo è %d \n",numberS);

write(clone,mess,sizeof(mess));

close(clone);
}

close(socket_p);
exit(0);
}



Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 07-02-2009, 12:32:47
allora... il client funziona se invece di passare il parametro dal main lo inserisco direttamente come parametro di inet_addr. Ora voglio provare se tutto il programma distribuito funziona. Userò il tuo come confronto grazie.


Title: Re:problema esecuzione programmi c linux
Post by: Acicatena86 on 07-02-2009, 12:34:14
allora... il client funziona se invece di passare il parametro dal main lo inserisco direttamente come parametro di inet_addr. Ora voglio provare se tutto il programma distribuito funziona. Userò il tuo come confronto grazie.
Figurati . Visto la nuova modalità d'esame , ci dobbiamo aiutare  :-OK Fammi sapere


Title: Re:problema esecuzione programmi c linux
Post by: Psycho on 07-02-2009, 12:38:26
si faccio esattamente come hai scritto. Ho consultato lo stevens, q da quanto scritto nel libro, per convertire una stringa in un indirizzo a 32 bit devo utilizzare la function inet_addr.Dunque scrivo:
Code:

server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=inet_addr(argv[0]);



a questo punto la struct dovrebbe essere completa. Però continua a darmi quell'errore, forse il problema è nel passaggio dei parametri al main.



il problema di questo codice è che dovresti scrivere argv[1] se non erro,poichè
argv[0]=./nomeFile


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 07-02-2009, 13:15:36
si faccio esattamente come hai scritto. Ho consultato lo stevens, q da quanto scritto nel libro, per convertire una stringa in un indirizzo a 32 bit devo utilizzare la function inet_addr.Dunque scrivo:
Code:

server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=inet_addr(argv[0]);



a questo punto la struct dovrebbe essere completa. Però continua a darmi quell'errore, forse il problema è nel passaggio dei parametri al main.



il problema di questo codice è che dovresti scrivere argv[1] se non erro,poichè
argv[0]=./nomeFile

da errore anche con argv[1]. Acicatena86 per caso puoi postare anche il client ?


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 07-02-2009, 13:37:55
questo è il mio client
Code:
#include <sys/types.h>
#include<sys/socket.h>
#include <stdio.h>
#include <netdb.h>
#include <netinet/in.h>

int main()
{
int sk;
struct sockaddr_in server;
struct in_addr sa;
unsigned short port=9000;
char messaggio[300];
server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=inet_addr("127.0.0.1");
printf("client partito");
if((sk=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("Errore creazione socket\n");
exit(-1);
}
if(connect(sk,(struct sockaddr*)&server,sizeof(server))<0)
{
printf("Errore connesione\n");
exit(-1);
}
int i=0;

while(i<10)
{
  send(sk,"invio di dati",strlen("invio di dati\n")+1,0);
  recv(sk,messaggio,sizeof(messaggio),0);
  printf("Risposta server: %s",messaggio);
  i++;
}
close(socket);
exit(0);


}


in pratica quando lo faccio partire mi ritorna il prompt dei comandi. E' possibile che non sia in grado di fare comunicare il server e il client perchè si trovano sulla stessa macchina e utilizzo la famiglia delle socket AF_INET?


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 07-02-2009, 13:46:50
ho tolto il ciclo while, e i programmi partono ma mi danno errore nell'accept della connessione ora ci lavoro un pò su


Title: Re:problema esecuzione programmi c linux
Post by: Acicatena86 on 07-02-2009, 13:52:06
Ecco il mio client


Code:


#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<netdb.h>
#include<string.h>
#include<netinet/in.h>
#include<unistd.h>


int main(int argc,char *argv[])
{
struct sockaddr_in addr_serv;
struct hostent *host;

if(argc!=4)
{
printf("Il client %s si usa con IP - PORT - VAL \n",argv[0]);
exit(-1);
}


addr_serv.sin_family=AF_INET;
u_int16_t  port=htons( atoi(argv[2])  );

addr_serv.sin_port=port;

host=gethostbyname(argv[1]);

memcpy(&addr_serv.sin_addr,host->h_addr_list[0],sizeof(host->h_addr_list[0]));

int s=socket(PF_INET,SOCK_STREAM,0);

int c=connect(s,(struct sockaddr*)&addr_serv,sizeof(addr_serv));



write(s,argv[3],sizeof(argv[3]));

int retcode;
char risp[100];
while( (retcode=read(s,risp,sizeof(risp)))!=0)
{
if(retcode==-1)
{printf("errore nella lettura\n");
exit(-2);
}

printf("Il server risponde con questo messaggio \n");
write(fileno(stdout),risp,retcode);
}

printf("Chiudo la connessione\n");
close(s);
exit(0);
}





Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 07-02-2009, 14:43:54
posto il mio codice:

lato server:
Code:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>

int main()
{
int sk;
struct sockaddr_in client;
struct sockaddr_in server;
int clientaddr_size;
int client_connect;
char data[300];
char response[]="Messaggio ricevuto";
unsigned short port=9000;
server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=INADDR_ANY;
if((sk=socket(AF_INET,SOCK_STREAM,0))<0)
  { 
    printf("Errore di creazione socket nel server\n");
    exit(-1);
  }
if((bind(sk, (struct sockaddr *) &server, sizeof(server)))<0)
{printf("Errore di collegamento socket\n");
exit(-1);}
listen(sk,20);
while(1)
{
   if((client_connect=accept(sk,(struct sockaddr *) &client,&clientaddr_size))<0)
   {printf("Errore nell'accettare la connessione\n");exit(-1);}
    recv(client_connect,data,sizeof(data),0);
    printf("Ho ricevuto: %s", data);
    send(client_connect,response,sizeof(response),0);
    close(client_connect);   
}
exit(0);
}



lato client:

Code:
#include <sys/types.h>
#include<sys/socket.h>
#include <stdio.h>
#include <netdb.h>
#include <netinet/in.h>

int main()
{
int sk;
struct sockaddr_in server;
struct in_addr sa;
unsigned short port=9000;
char messaggio[300];
server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=inet_addr("127.0.0.1");
printf("client partito\n");
if((sk=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("Errore creazione socket\n");
exit(-1);
}
if((connect(sk,(struct sockaddr*)&server,sizeof(server)))<0)
{
 printf("Errore connesione\n");
 exit(-1);
}
send(sk,"invio di dati",strlen("invio di dati\n")+1,0);
recv(sk,messaggio,sizeof(messaggio),0);
printf("Risposta server: %s",messaggio);
close(socket);
exit(0);


}



il programma dovrebbe funzionare. Il mio intento era quello di collegare gli host senza ricorrere alla chiamata hostent e tutto il resto.Soltanto che l'accept del server restituisce errore e non so il perchè. Magari ne riparlerò con il prof. Grazie per l'aiuto ragazzi.


Title: Re:problema esecuzione programmi c linux
Post by: winnie86 on 09-02-2009, 16:14:31
Ciao a tutti!!!
sto provando a eseguire gli esercizi scaricati dal sito del prof...ma non ci riesco perchè ad ogni compilazione di qualunque esercizio mi da sempre qualche errore!!!cosa posso fare?

Grazie!


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 09-02-2009, 16:16:19
che tipo di errore ti da ?


Title: Re:problema esecuzione programmi c linux
Post by: winnie86 on 09-02-2009, 16:19:36
ad esempio... su fingers.c mi si ferma sulla riga "struct sockaddr_in locAddr, farAddr"
e credo che non mi riconosca le librerie...poi mi dice "storage size of locAddr isn't know" (lo stesso per farAddr)...e poi "AF_INET undeclared"...!


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 09-02-2009, 16:22:33
fammi capire questo errore lo da appena compili i file ? se si hai provato a compilarlo sia da scite che da console ?


Title: Re:problema esecuzione programmi c linux
Post by: winnie86 on 09-02-2009, 16:27:48
si...ho utilizzato Dev-C++ IDE e ho provato anche da console con il comando cc...se non sbaglio!


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 09-02-2009, 16:30:43
fai così: dirigiti nella cartella in cui si trova il file finger.c e digita

Code:
gcc fingerc.c -o fingerc


dovrebbe compilarti il tutto senza problemi. Poi digita un bel
Code:
./fingerc

per eseguire l'applicazione. Se non dovesse compilare dai uno sguardo ai pacchetti e assicurati che il compilatore abbia tutte le librerie a disposizione.


Title: Re:problema esecuzione programmi c linux
Post by: winnie86 on 09-02-2009, 16:41:08
già quando faccio gcc addrcnv.c -o addrcnv mi da questi errori:

"addrcnv.c:3:19: error: stdio.h: No such file or directory
addrcnv.c:4:23: error: arpa/inet.h: No such file or directory
addrcnv.c:5:20: error: string.h: No such file or directory
addrcnv.c: In function ‘main’:
addrcnv.c:9: error: storage size of ‘sa’ isn’t known
addrcnv.c:14: warning: incompatible implicit declaration of built-in function ‘fprintf’
addrcnv.c:14: error: ‘stderr’ undeclared (first use in this function)
addrcnv.c:14: error: (Each undeclared identifier is reported only once
addrcnv.c:14: error: for each function it appears in.)
addrcnv.c:17: warning: incompatible implicit declaration of built-in function ‘exit’
addrcnv.c:20: warning: assignment makes pointer from integer without a cast
addrcnv.c:21: warning: incompatible implicit declaration of built-in function ‘strcpy’
addrcnv.c:23: warning: incompatible implicit declaration of built-in function ‘printf’
addrcnv.c:31: warning: incompatible implicit declaration of built-in function ‘exit’
addrcnv.c:32:2: warning: no newline at end of file
"


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 09-02-2009, 16:45:11
questi sono errori nel codice sorgente non assenza di librerie....

Code:
addrcnv.c:3:19: error: stdio.h: No such file or directory
addrcnv.c:4:23: error: arpa/inet.h: No such file or directory
addrcnv.c:5:20: error: string.h: No such file or directory

di solito avviene quando ci si dimentica dei <> che racchiudono la libreria.

Code:
addrcnv.c:9: error: storage size of ‘sa’ isn’t known

quando non è stata indicata la dimensione della struct e così via. Dato che il codice del prof non saprei dirti, i codici che ho io compilano tranquillamente. A questo punto non saprei che dirti in caso ti mando i miei di codici e provi.


Title: Re:problema esecuzione programmi c linux
Post by: winnie86 on 09-02-2009, 16:59:05
A questo punto non saprei che dirti in caso ti mando i miei di codici e provi.
Mi faresti un grosso favore!!!


Title: Re:problema esecuzione programmi c linux
Post by: claudiom on 09-02-2009, 17:36:18
Scusa se faccio un'osservazione banale ma a volte capita che le cose + banali vengano trascurate:

1) stai compilando i sorgenti su linux giusto?

2) hai installato le librerie sulla tua distribuzione linux no?


Title: Re:problema esecuzione programmi c linux
Post by: winnie86 on 09-02-2009, 17:41:25
Scusa se faccio un'osservazione banale ma a volte capita che le cose + banali vengano trascurate:

1) stai compilando i sorgenti su linux giusto?

2) hai installato le librerie sulla tua distribuzione linux no?
.penso...come faccio a installare le librerie?


Title: Re:problema esecuzione programmi c linux
Post by: claudiom on 09-02-2009, 17:48:22
Devi installare il pacchetto libc6-dev.
Puoi farlo da shell digitanto sudo apt-get install libc6-dev
oppure attraverso il gestore di pacchetti synaptic.


Title: Re:problema esecuzione programmi c linux
Post by: winnie86 on 09-02-2009, 18:01:37
facendo sudo apt-get install libc6-dev mi da questo messaggio:

Il pacchetto libc6-dev non ha versioni disponibili, ma è nominato da un altro
pacchetto. Questo significa che il pacchetto manca, è diventato obsoleto
o è disponibile solo all'interno di un'altra sorgente
Comunque il seguente pacchetto lo sostituisce:
  linux-libc-dev


Title: Re:problema esecuzione programmi c linux
Post by: claudiom on 09-02-2009, 18:17:12
scrivi linux-libc-dev al posto di libc6-dev


Title: Re:problema esecuzione programmi c linux
Post by: hukketto on 09-02-2009, 20:19:09
ma devC++ non è per win?  .penso


Title: Re:problema esecuzione programmi c linux
Post by: winnie86 on 09-02-2009, 20:23:53
ma devC++ non è per win?  .penso
Si...ma infatti...quando provavo gli esempi di sistemi operativi...funzionava tutto correttamente!!!


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 09-02-2009, 22:04:00
si ma queste sono chiamate di sistema specifiche per unix e non esistono in windows che ha le sue.


Title: Re:problema esecuzione programmi c linux
Post by: ErMatador on 09-02-2009, 22:06:17
si ma queste sono chiamate di sistema specifiche per unix e non esistono in windows che ha le sue.

quoto

Se non vuoi perdere tempo ad installare linux io uso la virtual machine che ci diede il prof Riccobene per Web Programming e funziona benissimo :)


Title: Re:problema esecuzione programmi c linux
Post by: winnie86 on 10-02-2009, 09:52:06
si ma queste sono chiamate di sistema specifiche per unix e non esistono in windows che ha le sue.

quoto

Se non vuoi perdere tempo ad installare linux io uso la virtual machine che ci diede il prof Riccobene per Web Programming e funziona benissimo :)

Ma con ubuntu dovrebbe funzionare no?


Title: Re:problema esecuzione programmi c linux
Post by: nessunoHaStoNick® on 10-02-2009, 12:53:51
si ma queste sono chiamate di sistema specifiche per unix e non esistono in windows che ha le sue.

quoto

Se non vuoi perdere tempo ad installare linux io uso la virtual machine che ci diede il prof Riccobene per Web Programming e funziona benissimo :)

Ma con ubuntu dovrebbe funzionare no?

si funziona, ritornando al problema originale di Pandemia000, perchè dichiari la tua variabile "sa" di tipo  "in_addr" anzichè "sock_addr"?


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 10-02-2009, 12:54:15
si ma queste sono chiamate di sistema specifiche per unix e non esistono in windows che ha le sue.

quoto

Se non vuoi perdere tempo ad installare linux io uso la virtual machine che ci diede il prof Riccobene per Web Programming e funziona benissimo :)


Ma con ubuntu dovrebbe funzionare no?

si funziona


Title: Re:problema esecuzione programmi c linux
Post by: winnie86 on 10-02-2009, 15:05:19
a dire il vero ancora personalmente non ho scritto codice...sto cercando di capire quello fatto dal prof...per cui lui ha scritto in_addr piuttosto che sock_addr...


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 15-02-2009, 23:09:52
tornando al mio problema ho trovato la soluzione. Il dubbio è sorto quando i programmi si bloccavano nonostante il codice fosse corretto. Così ho compilato il codice del prof e lo stesso problema si ripresentava. Così ho subito pensato alle nuove librerie di linux e cercando in rete, al sito http://www.docmirror.net/it/linux/howto/misc/GCC-HOWTO/GCC-HOWTO-4.html ho trovato:

Quote
Problema

I sistemi POSIX controllano la presenza di segnali più frequentemente rispetto a sistemi UNIX più vecchi. Linux può eseguire dei gestori di segnali:

    * in modo asincrono (tramite un timer)
    * al ritorno da ogni chiamata di sistema
    * durante l'esecuzione delle seguenti chiamate di sistema: select(), pause(), connect(), accept(), read() su terminali, su socket, su pipe o su file in /proc, write() su terminali, su socket, su pipe o sulla line printer; open() su FIFO, su PTY o su linee seriali, ioctl() su terminali; fcntl() con il comando F_SETLKW; wait4(), syslog(), ogni operazione TCP o NFS.

Per altri sistemi operativi potrebbe essere necessario includere in questa lista le chiamate di sistema creat(), close(), getmsg(), putmsg(), msgrcv(), msgsnd(), recv(), send(), wait(), waitpid(), wait3(), tcdrain(), sigpause(), semop().

Se un segnale (per il quale il programma ha installato un gestore) avviene durante una chiamata di sistema, viene chiamato il gestore. Quando il gestore restituisce il controllo (alla chiamata di sistema), essa rileva che è stata interrotta e restituisce immediatamente -1 e errno = EINTR. Il programma non si aspetta che questo accada, pertanto si blocca.

inoltre lo stesso problema si presenta quando si passa alla chiamata gethostbyname una stringa (ad esempio se passate "120.0.0.1") mentre funziona se assegnate ad un char[] il valore e lo passate alla chiamata.L'unica cosa che non ho capito è come risolvere il problema. Il sito dice:
Quote
int result;
while (len > 0) {
        result = read(fd,buffer,len);
        if (result < 0) { if (errno != EINTR) break; }
        else { buffer += result; len -= result; }
}

ma da dove importo EINTR ? e errno ?


Title: Re:problema esecuzione programmi c linux
Post by: winnie86 on 18-02-2009, 19:07:47
Ciao a tutti...volevo un'informazione...come faccio a testare se funzionano il client e server locali scritti dal prof (unclnt e unsrvr)??...che comandi devo lanciare dopo avreli correttamente compilati???
Inoltre...qualcuno sa dirmi perchè quando provo a compilare programmi con i thread mi da questo errore:

/tmp/cc8F6PQm.o: In function `main':
hello.c:(.text+0x3e): undefined reference to `pthread_create'
hello.c:(.text+0x61): undefined reference to `pthread_create'
collect2: ld returned 1 exit status

Grazie!!!


Title: Re:problema esecuzione programmi c linux
Post by: johnnybravo on 19-02-2009, 10:03:56
Ciao a tutti...volevo un'informazione...come faccio a testare se funzionano il client e server locali scritti dal prof (unclnt e unsrvr)??...che comandi devo lanciare dopo avreli correttamente compilati???
Inoltre...qualcuno sa dirmi perchè quando provo a compilare programmi con i thread mi da questo errore:

/tmp/cc8F6PQm.o: In function `main':
hello.c:(.text+0x3e): undefined reference to `pthread_create'
hello.c:(.text+0x61): undefined reference to `pthread_create'
collect2: ld returned 1 exit status

Grazie!!!


Devi compilare in questo modo:

gcc <file.c> -o <nome_eseguibile> -lpthread

poi lanci con .\<nome_eseguibile>


Title: Re:problema esecuzione programmi c linux
Post by: winnie86 on 19-02-2009, 11:13:30
Si...infatti avevo già risolto!!! .wink


Title: Re:problema esecuzione programmi c linux
Post by: bluegirl on 19-06-2009, 09:55:15
si ma queste sono chiamate di sistema specifiche per unix e non esistono in windows che ha le sue.

quoto

Se non vuoi perdere tempo ad installare linux io uso la virtual machine che ci diede il prof Riccobene per Web Programming e funziona benissimo :)


Ma con ubuntu dovrebbe funzionare no?

Ciao...potresti dirmi per favore qual è la virtual machine data da Riccobene?Perchè su Windows non riesco a compilare nessun programma, neanche gli esempi del Prof. E sto usando Dev C++.
Vediamo se riesco a risolvere con questo che suggerisci.


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 19-06-2009, 10:12:57
va bene una qualsiasi distro. Prova con l'ultima di ubuntu, dovrebbe già installarti tutto il necessario per compilare gli esempi del prof.


Title: Re:problema esecuzione programmi c linux
Post by: bluegirl on 19-06-2009, 10:30:28
va bene una qualsiasi distro. Prova con l'ultima di ubuntu, dovrebbe già installarti tutto il necessario per compilare gli esempi del prof.

Ho Windows, non Linux .poverinoi
Per questo infatti uso Dev C++, ma non funge.


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 19-06-2009, 12:59:41
su windows non ti funzioneranno mai perchè i programmi usano le librerie gnu/linux e non win32. Se ti scoccia fare una installazione nativa puoi sempre installare linux su macchina virtuale, ma la presenza di un sistema linux è assolutamente obbligatoria.


Title: Re:problema esecuzione programmi c linux
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 19-06-2009, 13:05:34
ma da dove importo EINTR ? e errno ?
Ricordo che una volta ho fatto man errno e mi è spuntato il file in cui è presente errno.
Forse è proprio errno.h  :boh.


va bene una qualsiasi distro. Prova con l'ultima di ubuntu, dovrebbe già installarti tutto il necessario per compilare gli esempi del prof.
Ho Windows, non Linux .poverinoi
Per questo infatti uso Dev C++, ma non funge.
Puoi installare cygwin .wink.
 .ciaociao .ciaociao .ciaociao


Title: Re:problema esecuzione programmi c linux
Post by: bluegirl on 19-06-2009, 14:35:09
su windows non ti funzioneranno mai perchè i programmi usano le librerie gnu/linux e non win32. Se ti scoccia fare una installazione nativa puoi sempre installare linux su macchina virtuale, ma la presenza di un sistema linux è assolutamente obbligatoria.

Ah ecco .poverinoi .poverinoi, Grazie mille...ma qual era questa virtual machine che consigliava Riccobene?


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 19-06-2009, 15:18:16
un virutalizzatore gratuito è Sun Virtual Box ed è pure facile da usare. Con questo puoi virtualizzare praticamente tutti i sistemi operativi x86 (e x64  se supportato dal tuo processore).


Title: Re:problema esecuzione programmi c linux
Post by: bluegirl on 19-06-2009, 17:54:22
un virutalizzatore gratuito è Sun Virtual Box ed è pure facile da usare. Con questo puoi virtualizzare praticamente tutti i sistemi operativi x86 (e x64  se supportato dal tuo processore).

Ok grazie mille, provo subito .wink


Title: Re:problema esecuzione programmi c linux
Post by: Pandemia000 on 19-06-2009, 18:09:24
ok fammi sapere  .smile :-ciao


Title: Re:problema esecuzione programmi c linux
Post by: salvin on 14-07-2009, 01:00:23
Pandemia000, non ti funziona semplicemente perché hai scritto:
Code:
int main(char * argv[])
al posto di:
Code:
int main(int argc, char * argv[])

...penso.