|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2004
Città: Lecco/Milano
Messaggi: 2863
|
ho un problema con la programmazione di rete su mac os x
ciao, ho un problema su mac os x con la programmazione di rete
uso c, ho installato xcode in modalità completa, ma quando tento di compilare alcuni file ricevo errori del tipo: error: 'inet_addr' was not declared in this scope error: 'wait' was not declared in this scope error: 'exit' was not declared in this scope (gli include sono corretti...) quando queste sono funzioni assolutamente standard e non capisco come mai gcc non me le trovi... il mio prof dell'uni usa pure lui un macbook pro... quindi non è assolutamente un problema di sistema operativo... non riesco proprio a risolverlo... mi aiutate per favore? googlando non riesco a trovare nessuna risposta decente... ![]()
__________________
C'era un moscerino sul tuo schermo |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2005
Città: Roma
Messaggi: 481
|
Non è normale no. Posta il codice completo e vediamo.
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Feb 2004
Città: Lecco/Milano
Messaggi: 2863
|
Codice:
#include <stdio.h> #include <unistd.h> #include <strings.h> #include <stdlib.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #define PORT 4000 #define MAX_CMD_LEN 128 void addr_initialize(struct sockaddr_in* indirizzo, int port, long IPaddr){ indirizzo->sin_family = AF_INET; indirizzo->sin_port = htons((u_short) port); indirizzo->sin_addr.s_addr = IPaddr; } char * ricevi_string(int sd ){ char c; static char answer[MAX_CMD_LEN]; int answer_len = 0; while(1){ if(!recv(sd,&c,1,0)){ printf("connessione chiusa dal server"); close(sd); exit(EXIT_SUCCESS); } answer[answer_len] = c; answer_len++; if(!c) break; } return answer; } int main(int argc, char* argv[]){ int sd; char command[MAX_CMD_LEN]; struct sockaddr_in server_addr; if(argc!=2){ printf("\n Parametri insesatti\n"); printf("\n USO: esempio SERVERADDRESS\n"); exit(EXIT_FAILURE); } addr_initialize(&server_addr,PORT,inet_addr(argv[1])); //mi da errore qui sulla inet_addr sd = socket(PF_INET,SOCK_STREAM,0); if(connect(sd,(struct sockaddr*)&server_addr, sizeof(server_addr)) == -1){ printf("\n ERRORE DI CONNESSIONE!\n"); exit(EXIT_FAILURE); } printf("Connessione eseguita con successo.\n pronto a ricevere comandi.\n Digitare \"exit\" per uscire"); while(1){ printf("\n>"); fflush(stdout); fgets(command,128,stdin); send(sd,command,strlen(command)-1,0); printf("server> %s", ricevi_string(sd)); } printf("chiudo"); close(sd); return EXIT_SUCCESS; } la prossima volta che lo vedo provo a chiedere pure a lui, eppure un mio compagno con un macbook normale non ha problemi... ho provato a disisnstallare xcode, riavviare e reinstallarlo, ma mi da sempre errore dicendo che inet_addr non è stata dichiarata... oppure più semplicemente anche questo non mi va Codice:
#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(){ int pid; int stato_exit, stato_wait; pid=fork(); if(pid==0){ printf("Processo figlio\n"); stato_exit = 5; exit(stato_exit); } else{ printf("ho generato un figlio con pid=%d\n",pid); pid = wait(&stato_wait); printf("è terminato processo %d con stato%d\n",pid, stato_exit/256); } return 0; }
__________________
C'era un moscerino sul tuo schermo |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jan 2005
Città: Roma
Messaggi: 481
|
Allora, l'organizzazione delle librerie e la relativa dichiarazione all'interno di esse delle system call posix è leggermente diverso rispetto a Linux.
Per sapere esattamente cosa includere ogni volta non devi fare altre che aprire XCode, nel menu in cima allo schermo selezioni Help e poi Documentation ( qui hai un motore di ricerca per tutte le funzioni C, Java, C++ e Obj-C ). Nel campo di ricerca scrivi la funzione che ti interessa chiamare e lui ti restituisce la man page. Ad esempio se cerchi la exit ti dà: Codice:
Name exit, _Exit -- perform normal program termination Library Standard C Library (libc, -lc) Synopsis #include <stdlib.h> [...] Codice:
#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(){ int pid; int stato_exit, stato_wait; pid=fork(); if(pid==0){ printf("Processo figlio\n"); stato_exit = 5; exit(stato_exit); } else{ printf("ho generato un figlio con pid=%d\n",pid); pid = wait(&stato_wait); printf("è terminato processo %d con stato%d\n",pid, stato_exit/256); } return 0; } Ti consiglio caldamente di non fare riferimento sempre e comunque a listati per Linux perchè ti ripeto alcune sys call posix sono dichiarate in lib diverse. Spero di averti dato una mano. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Feb 2004
Città: Lecco/Milano
Messaggi: 2863
|
grazie mille! quindi erano gli include sbagliati...
per il secondo listato ci può stare perchè l'han fatto alla lavagna, ma per il primo mi sembra strano perchè il mio prof usa proprio un macbook pro e io l'ho copiato pari pari... vabbè cmq così funziona, grazie ancora!
__________________
C'era un moscerino sul tuo schermo |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jan 2005
Città: Roma
Messaggi: 481
|
Prego!
Ricordati di usare il motore interno di ricerca delle man page di XCode, è molto comodo e le man pages sono aggiornate continuamente(a blocchi di centinaia di Mb purtroppo :| ) |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:04.