Torna indietro   Hardware Upgrade Forum > Software > Programmazione

OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Abbiamo potuto mettere le mani in anteprima sul nuovo monitor MSI dedicato ai giocatori: un mostro che adotta un pannello QD-OLED da 26,5 pollici con risoluzione 2560 x 1440 pixel, frequenza di aggiornamento fino a 500 Hz e tempo di risposta di 0,03 ms GtG
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI aggiorna la sua linea di droni ultraleggeri con Neo 2, un quadricottero da 160 grammi che mantiene la compattezza del predecessore ma introduce una stabilizzazione meccanica a due assi, sensori omnidirezionali e un sistema LiDAR
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-05-2009, 18:17   #1
annamariavivo
Junior Member
 
Iscritto dal: May 2009
Messaggi: 5
[c++] help

ho questo codice e di c++ n ne capisco molto, ringrazio anticipatamente chiunque potesse aiutarmi:
// libreria della tesina

// Parametri di configurazione del servizio di posta
#define LEN_INDIRIZZO 20 // Lunghezza di un indirizzo (campo mittente e campo destinatario)
#define LEN_OGGETTO 50 // Lunghezza del campo oggetto
#define LEN_TESTO 300 // Lunghezza del campo testo
#define LEN_PSW 15 // Lunghezza della password
#define MAX_UTENTI 7 // Numero massimo di utenti = caselle di posta
#define MAX_MESSAGGI 10 // Numero massimo di messaggi per ciascun utente
#define MAX_CARATTERI 1000 // Numero massimo di caratteri che si possono digitare

// Struttura dell'account
typedef struct {
char indirizzo[LEN_INDIRIZZO];
char password[LEN_PSW];
} UTENTE;

// Struttura dell'email.
typedef struct {
char mMittente[LEN_INDIRIZZO];
char mDestinatario[LEN_INDIRIZZO];
char mOggetto[LEN_OGGETTO];
char mTesto[LEN_TESTO];
} MESSAGGIO;

// Nome dei semafori.

#define USER_SEM_FILE "SemaforoUtenti"
#define MESSAGE_SEM_FILE "SemaforoMessaggi"

// Definizione di funzioni comuni ai due programmi.

#define GestioneErrori(s) {
printf("%s\n", s);
ExitProcess(EXIT_FAILURE);
}

#define WaitForManyObjects(semaforo, numero, attesa) {
int contatore;
for (contatore = 0; contatore < numero; contatore++)
WaitForSingleObject(semaforo, attesa);
}


gli errori sono:

c:\documents and settings\annarita\desktop\tesinalibreria.h(35) :error C2501: 'printf' : missing storage-class or type specifiers
c:\documents and settings\annarita\desktop\tesinalibreria.h(35) : error C2373: 'printf' : redefinition; different type modifiers
c:\programmi\microsoft visual studio\vc98\include\stdio.h(329) : see declaration of 'printf'
c:\documents and settings\annarita\desktop\tesinalibreria.h(35) : error C2078: too many initializers
c:\documents and settings\annarita\desktop\tesinalibreria.h(36) : error C2501: 'ExitProcess' : missing storage-class or type specifiers
c:\documents and settings\annarita\desktop\tesinalibreria.h(36) : error C2373: 'ExitProcess' : redefinition; different type modifiers
c:\programmi\microsoft visual studio\vc98\include\winbase.h(1665) : see declaration of 'ExitProcess'
c:\documents and settings\annarita\desktop\tesinalibreria.h(37) : error C2143: syntax error : missing ';' before '}'
c:\documents and settings\annarita\desktop\tesinalibreria.h(37) : error C2143: syntax error : missing ';' before '}'
c:\documents and settings\annarita\desktop\tesinalibreria.h(37) : error C2143: syntax error : missing ';' before '}'
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2143: syntax error : missing ';' before 'for'
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2143: syntax error : missing ')' before ';'
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2143: syntax error : missing ';' before '<'
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2501: 'contatore' : missing storage-class or type specifiers
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2143: syntax error : missing ';' before '<'
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2143: syntax error : missing ';' before '++'
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2501: 'contatore' : missing storage-class or type specifiers
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2086: 'contatore' : redefinition
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2143: syntax error : missing ';' before '++'
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2059: syntax error : ')'
c:\documents and settings\annarita\desktop\tesinalibreria.h(43) : error C2143: syntax error : missing ';' before '}'
c:\documents and settings\annarita\desktop\tesinalibreria.h(43) : error C2143: syntax error : missing ';' before '}'
c:\documents and settings\annarita\desktop\tesinalibreria.h(43) : error C2143: syntax error : missing ';' before '}'
annamariavivo è offline   Rispondi citando il messaggio o parte di esso
Old 03-05-2009, 11:20   #2
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Il codice da te riportato è codice C e non C++.
Ci sono moltissimi errori, li ho corretti e ti riporto una versione corretta anche se non è possibile testarla non potendo compilare ed eseguire un singolo file di intestazione (.h), spero funzioni...

Codice:
#define LEN_INDIRIZZO 20 // Lunghezza di un indirizzo (campo mittente e campo destinatario)
#define LEN_OGGETTO 50 // Lunghezza del campo oggetto
#define LEN_TESTO 300 // Lunghezza del campo testo
#define LEN_PSW 15 // Lunghezza della password
#define MAX_UTENTI 7 // Numero massimo di utenti = caselle di posta
#define MAX_MESSAGGI 10 // Numero massimo di messaggi per ciascun utente
#define MAX_CARATTERI 1000 // Numero massimo di caratteri che si possono digitare

// Struttura dell'account
typedef struct {
	char indirizzo[LEN_INDIRIZZO];
	char password[LEN_PSW];
} UTENTE;

// Struttura dell'email.
typedef struct {
	char mMittente[LEN_INDIRIZZO];
	char mDestinatario[LEN_INDIRIZZO];
	char mOggetto[LEN_OGGETTO];
	char mTesto[LEN_TESTO];
} MESSAGGIO;

// Nome dei semafori.

#define USER_SEM_FILE "SemaforoUtenti"			//a cosa serve?
#define MESSAGE_SEM_FILE "SemaforoMessaggi"	//a cosa serve?

// Definizione di funzioni comuni ai due programmi.

void GestioneErrori(char* s) { 
	printf("%s\n", s); 
	ExitProcess(EXIT_FAILURE); 
}

void WaitForManyObjects(HANDLE semaforo, int numero, int attesa) { // dai un occhio a WaitForMultipleObects che fa parte della libreria standard di windows
	int contatore; 
	for (contatore = 0; contatore < numero; contatore++) WaitForSingleObject(semaforo, attesa);
}
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 03-05-2009, 13:54   #3
BrutPitt
Senior Member
 
L'Avatar di BrutPitt
 
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
Manca il backslasch nei defines per poter andar a capo.
Credo che cosi' possa funzionare:

Codice:
#define GestioneErrori(s) {\
printf("%s\n", s);\
ExitProcess(EXIT_FAILURE);\
}

#define WaitForManyObjects(semaforo, numero, attesa) {\
int contatore;\
for (contatore = 0; contatore < numero; contatore++)\
WaitForSingleObject(semaforo, attesa);\
}
P.S.
Dopo il backslash non ci deve essere alcun carattere, nemmeno uo spazio, solo un "a capo".

Ultima modifica di BrutPitt : 03-05-2009 alle 13:57.
BrutPitt è offline   Rispondi citando il messaggio o parte di esso
Old 03-05-2009, 21:03   #4
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
ma... ma... sono veramente funzioni definite nel preprocessore?
Oddio ma è terribile...
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2009, 10:46   #5
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da _Claudio Guarda i messaggi
Oddio ma è terribile...
L'hai detto...
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 10:56   #6
annamariavivo
Junior Member
 
Iscritto dal: May 2009
Messaggi: 5
ho provato a modifica re il codice come mi avevi detto e mi ha dato i seguenti errori:




1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(33) : error C2010: '*' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(33) : error C2010: 's' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C2065: 's' : undeclared identifier
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C2365: 'printf' : redefinition; previous definition was 'function'
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(287) : see declaration of 'printf'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C2078: too many initializers
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(35) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(35) : error C2365: 'ExitProcess' : redefinition; previous definition was 'function'
1> c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(3391) : see declaration of 'ExitProcess'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(36) : error C2059: syntax error : '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(36) : error C2143: syntax error : missing ';' before '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(36) : error C2059: syntax error : '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2010: 's' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2010: 'n' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2010: 'a' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2009: reuse of macro formal 'int'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2059: syntax error : 'for'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2143: syntax error : missing ')' before ';'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2143: syntax error : missing ';' before '<'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2143: syntax error : missing ';' before '++'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2086: 'int contatore' : redefinition
1> c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : see declaration of 'contatore'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2059: syntax error : ')'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(42) : error C2059: syntax error : '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(42) : error C2143: syntax error : missing ';' before '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(42) : error C2059: syntax error : '}'
1> c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(13) : see declaration of 'UTENTE'
1>server.cpp
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(33) : error C2010: '*' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(33) : error C2010: 's' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C2065: 's' : undeclared identifier
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C2365: 'printf' : redefinition; previous definition was 'function'
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(287) : see declaration of 'printf'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C2078: too many initializers
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(35) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(35) : error C2365: 'ExitProcess' : redefinition; previous definition was 'function'
1> c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(3391) : see declaration of 'ExitProcess'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(36) : error C2059: syntax error : '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(36) : error C2143: syntax error : missing ';' before '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(36) : error C2059: syntax error : '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2010: 's' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2010: 'n' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2010: 'a' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2009: reuse of macro formal 'int'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2059: syntax error : 'for'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2143: syntax error : missing ')' before ';'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2143: syntax error : missing ';' before '<'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2143: syntax error : missing ';' before '++'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2086: 'int contatore' : redefinition
1> c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : see declaration of 'contatore'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2059: syntax error : ')'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(42) : error C2059: syntax error : '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(42) : error C2143: syntax error : missing ';' before '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(42) : error C2059: syntax error : '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\server.cpp(24) : error C2143: syntax error : missing ';' before '{'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\server.cpp(24) : error C2447: '{' : missing function header (old-style formal list?)
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\server.cpp(149) : warning C4002: too many actual parameters for macro 'WaitForManyObjects'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\server.cpp(259) : warning C4002: too many actual parameters for macro 'WaitForManyObjects'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\server.cpp(260) : warning C4002: too many actual parameters for macro 'WaitForManyObjects'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\server.cpp(343) : fatal error C1004: unexpected end-of-file found
Forse l'errore è dovuto al fatto che uso visual studio 2008 che non compila c ma c++,spero di non aver detto un'eresia ma non ne capisco molto di programmazione in c, e se è così potreste consigliarmi un compilatore di c per vista?
annamariavivo è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 11:55   #7
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
MSVC (il compilatore C/C++ microsoft) compila sia C che c++, basta fornire come estensione di file .c e lui compila usando le direttive C, per quanto riguarda gli header li compila comunque.

Se l'hai modificato come ti ho scritto io prova a modificarlo come ti ha consigliato BrutPitt... usando delle funzioni macro, anche se è una cosa da evitare come la peste.

Non ho guardato la sfilza di errori... comunque faresti bene a dare una restaurata generale al codice perchè senò non ne esci più, magari leggi qualche manuale veloce sul C che trovi ad esempio qui:
http://www.physics.drexel.edu/course...eral/C_basics/
http://www.cprogramming.com/tutorial/cpreprocessor.html
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 14:15   #8
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Le modifiche suggerite da BrutPitt sono corrette. Probabilmente c'e' da modificare da un'altra parte.
Se vuoi puoi provare a postare il codice, magari comprensivo del progetto (cosi' e' piu' facile verificare perche' non ne vuole sapere di compilare)
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2009, 09:53   #9
annamariavivo
Junior Member
 
Iscritto dal: May 2009
Messaggi: 5
Dunque la specifica della tesina è:un servizio di E-mail limitato agli utenti di una
sola macchina. Le E-
mail scambiate tra i vari utenti devono essere
memorizzate su uno o
piu' file. In questo caso il servizio e'
gestito da un processo server
che accetta e processa
sequenzialmente le richieste di uno o piu'
processi client.

Il software del client deve fornire ad un utente
interattivo
un menu' con le seguenti funzioni:

1. Lettura di tutti i
messaggi ricevuti dall'utente.
2. Spedizione di un nuovo messaggio ad
uno qualunque degli altri utenti.
3. Lettura di tutti i messaggi
spediti dall'utente.
4. Cancellazione di un qualsiasi messaggio
ricevuto/spedito dall'utente.

Un messaggio deve contenere almeno
i campi Mittente, Destinatario, Oggetto e
Testo. La comunicazione tra
client e server deve sfruttare le code di
messaggi nel caso di sistema
UNIX/LINUX o i mailslot nel caso di
sistema Windows.

Quello che ho scritto io invece è questo (chiedo in anticipo scusa per le scemenze che sic avrò scritto):
// Server

#include <stdio.h>
#include <windows.h>
#include <io.h>

#include "../tesinalibreria.h"









// Funzione per la creazione dei file e dei semafori
void AvviaServer(
HANDLE *UserFile, // puntatore all'handle del file degli accounts
HANDLE *MessageFile, // puntatore all'handle del file dei messaggi
HANDLE *UserSem, // puntatore all'handle del semaforo per l'accesso all'elenco utenti
HANDLE *MessageSem) // puntatore all'handle del semaforo per l'accesso all'elenco messaggi
{
char *p;

// Verifico che il processo Server non sia già in esecuzione
*UserFile = OpenFile(File,
GENERIC_WRITE, // vedere il metodo open file
0,
NULL,
TRUNCATE_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
*MessageFile = OpenFile(File,
GENERIC_WRITE,
0,
NULL,
TRUNCATE_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (*UserFile != NULL || *MessageFile!= NULL)
GestioneErrori("\tErrore nell'avvio del server di posta.\n\tVerificare che il servizio non sia già in esecuzione");

// Creo il file che conterrà i messaggi di posta
*MessageFile = CreateFile(File,
GENERIC_WRITE,
0,
NULL,
TRUNCATE_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (*MessageFile == INVALID_HANDLE_VALUE) GestioneErrori("Errore nella CreateFile relativa ai messaggi.")
else {
p = (char *)MapViewOfFile(*MessageFile, FILE_WRITE, 0, 0, 0);
if (p == NULL) GestioneErrori("Errore nella MapViewOfFile relativa ai messaggi");
InizializzaMemoria(p, sizeof(MESSAGGIO), MAX_MESSAGGI); // Inizializzo la memoria messaggi.
}

// Creo i file che conterrà gli accounts
*UserFile = CreateFile(File,
GENERIC_WRITE,
0,
NULL,
TRUNCATE_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (*UserFile == INVALID_HANDLE_VALUE) GestioneErrori("Errore nella CreateFile relativa agli utenti.")


// Creo i Semafori.
*UserSem = CreateSemaphore(NULL,
MAX_UTENTI,
MAX_UTENTI,
USER_SEM_FILE);
if (*UserSem == NULL) GestioneErrori("Errore nella CreateSemaphore relativa agli utenti.");
*MessageSem = CreateSemaphore(NULL,
MAX_UTENTI,
MAX_UTENTI,
MESSAGE_SEM_FILE);
if (*MessageSem == NULL) GestioneErrori("Errore nella CreateSemaphore relativa ai messaggi.");

printf("\tMail Server avviato correttamente.\n");
}





// Chiusura dei file e rilascio dei semafori
void FermaServer(
HANDLE UserFile,
HANDLE MessageFile,
HANDLE UserSem,
HANDLE MessageSem)
{
int err = 0;

if (UserSem != NULL) CloseHandle(UserSem);
else err++;
if (MessageSem != NULL) CloseHandle(MessageSem);
else err++;
if (UserFile != NULL) CloseHandle(UserFile);
else err++;
if (MessageFile != NULL) CloseHandle(MessageFile);
else err++;

if (err != 0) GestioneErrori("Si sono verificati degli errori durante la chiusura degli HANDLE.\n");
puts("\tIl Server di Posta e' stato fermato.");
}




// Creazione di un nuovo Account di Posta
void NuovoUtente(
HANDLE UserFile,
HANDLE UserSem)
{
UTENTE NewUser, RUser;
char *p;
int i , c = 0;

puts("\n\nCreazione di un nuovo Account di Posta:");
puts("---------------------------------------\n");

// Inserimento Username: almeno un carattere e non più del limite massimo
printf("Inserire il nuovo account di posta (Max %d caratteri).\nUserName>", (L_UTENTE - 1));
i = read(0, NewUser.account, L_UTENTE);
if (i == 1){
puts("\n\n\tLa UserName deve contenere almeno un carattere! \n\tImpossibile procedere alla creazione dell'account!\n\n");
return;
}
if ((i == L_UTENTE) && (NewUser.account[L_UTENTE-1] != '\n')){
puts("\n\n\tIl nome utente inserito e' troppo lungo! \n\tImpossibile procedere alla creazione dell'account!\n\n");
return;
}
NewUser.account[i - 1] = '\0';

// Inserimento Password: non più lunga del limite massimo
printf("Inserire la Password (Max %d caratteri).\nPassWord>", (L_PW-1));
i = read(0, NewUser.password, L_PW);
if ((i == L_PW) && (NewUser.password[L_PW-1] != '\n')){
puts("\n\n\tLa password inserita e' troppo lunga! \n\tImpossibile procedere alla creazione dell'account!\n\n");
return;
}
NewUser.password[i - 1] = '\0';

WaitForManyObjects(UserSem, MAX_UTENTI, INFINITE); // Decremento il Semaforo del massimo numero di utenti
annamariavivo è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2009, 16:31   #10
BrutPitt
Senior Member
 
L'Avatar di BrutPitt
 
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
Quote:
Originariamente inviato da annamariavivo Guarda i messaggi
ho provato a modifica re il codice come mi avevi detto e mi ha dato i seguenti errori:


1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(33) : error C2010: '*' : unexpected in macro formal parameter list
...
OMISSIS
...

Forse l'errore è dovuto al fatto che uso visual studio 2008 che non compila c ma c++,spero di non aver detto un'eresia ma non ne capisco molto di programmazione in c, e se è così potreste consigliarmi un compilatore di c per vista?
Quello quotato non e' tanto un errore per aver compilato in C++... quello lo ottieni se hai scritto una cosa del tipo:

#define GestioneErrori(char *s) {

che e' assolutamente errata.

Usa le correzioni alle macro parametrizzate che avevo precedentemente postato, e l'include si comporta come desideri.


Poi segui il consiglio di _Claudio, e per il VC++ rinomina i file in ".c" cosi' li compilera' come richiedi.
(esiste un'altra procedura... ma questa e' la piu' semplice)

Per quanto riguarda il codice da te postato... posso dirti:

File non e' definito... per nessuna OpenFile... ed e' sempre lo stesso!
L_PW la usi al posto di LEN_PASSWORD
L_UTENTE non e' definita... ma non e' definita nemmeno il membro account della struttura UTENTI che hai nell'include (almeno in quello che hai postato all'inizio).

Ma questa e' solo una rapida occhiata... e sono errori davvero elementari.
Nel senso che ti verrebbero segnalati dal compilatore e che con una corretta interpretazione in lettura, sono facilmente risolvibili.
Ovviamente risolvibili da TE... che dovresti sapere cosa andrai a "costruire".

Diverso e' un errore tipo:
read(0, NewUser.account, L_UTENTE) (che non viene segnalato) in cui leggi da un HANDLE nullo... magari pensando di averlo aperto con OpenFile.
Se usi read(...) lo apri con open(...)... se usi OpenFile(...) leggi con ReadFile(...)

Ultima modifica di BrutPitt : 07-05-2009 alle 16:54.
BrutPitt è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2009, 14:35   #11
annamariavivo
Junior Member
 
Iscritto dal: May 2009
Messaggi: 5
grazie bruttpitt per i consigli adesso va molto meglio ho solo riscontrato i seguenti errori nel server:
1>c:\users\annarita\desktop\server.c.cpp(15) : error C2065: 'HANDLE' : undeclared identifier
1>c:\users\annarita\desktop\server.c.cpp(15) : error C2065: 'UserFile' : undeclared identifier
1>c:\users\annarita\desktop\server.c.cpp(19) : error C2448: 'AvviaServer' : function-style initializer appears to be a function definition
1>c:\users\annarita\desktop\server.c.cpp(201) : error C2146: syntax error : missing ')' before identifier 'UserFile'
1>c:\users\annarita\desktop\server.c.cpp(202) : error C2059: syntax error : ')'
grazie ancora
annamariavivo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone L'IA "seria" di Appian è divers...
Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Apple Maps e Ads sono Gatekeeper? L'Euro...
Il nuovo pieghevole Huawei Mate X7 &egr...
L'app Apple Podcasts si comporta in modo...
Una copia fisica di Fortnite è st...
Motorola prepara il suo primo smartphone...
Hisense in forte ribasso: il 75 pollici ...
Galaxy S27 Ultra potrebbe utilizzare la ...
Ultimi 2 giorni: ecco le offerte Amazon ...
Maxi sconti su wallbox e cavi per la ric...
Tutti gli sconti più forti sugli ...
Il prossimo smartphone di OnePlus avr&ag...
Che fine ha fatto il Trump Phone? L'usci...
TOP 10 Amazon Black Friday, aggiornata: ...
Ancora per oggi e domani: -20% Black Fri...
Il Bonus Elettrodomestici è un st...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:32.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v