Pages: [1] 2 3 4   Go Down
Print
Author Topic: problema esecuzione programmi c linux  (Read 17728 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« 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);


}



Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
Acicatena86
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 404


See full me now who neon


« Reply #1 on: 06-02-2009, 23:45:47 »

prova a fare così

Code:
gcc nomefile.c  -o nomefile.o

./nomefile
Logged
KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #2 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.
Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #3 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
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #4 on: 07-02-2009, 10:05:30 »

proverò così allora grazie mille ragazzi!!
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
nessunoHaStoNick®
Forumista
***
Offline Offline

Gender: Male
Posts: 660



« Reply #5 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 
Logged
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #6 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
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #7 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
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #8 on: 07-02-2009, 11:45:31 »

posta il codice
Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #9 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 ?
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
Acicatena86
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 404


See full me now who neon


« Reply #10 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); 
Logged
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #11 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.
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
Acicatena86
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 404


See full me now who neon


« Reply #12 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
??
Logged
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #13 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.

Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
Acicatena86
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 404


See full me now who neon


« Reply #14 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);
}

Logged
Pages: [1] 2 3 4   Go Up
Print
Jump to: