| 	
	
	
		
		|||||||
  | 
		
| 
 | 
![]()  | 
	
	
| 
		 | 
	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: 14:36.









		
		
		

 
 







