Я не видел весь код, потому что здесь ночь !!! :)
Но я вижу, что код функции autentica (autentica.c) кажется неправильным использованием strcmp! Я думаю, это может быть проблемой!
Это:
while (!feof(file)) {//legge finchè non finisce il file
fread(&acc_to_cmp, sizeof(acc_to_cmp), 1, file);//recupera un account dal file
if (strcmp(account.matricola, acc_to_cmp.matricola)) {//se l'utente esiste
if (strcmp(account.password, acc_to_cmp.password)) {//controlla la password
write(fd, (comm_t *)OK, sizeof(comm_t));//se coincidono concedi l'accesso
fclose(file);
return 1;
}
else{//se non coincidono
write(fd, (comm_t *)WRONG_PASS, sizeof(comm_t));//nega l'accesso
fclose(file);
return 0;
}
}
}//se l'utente non esiste
Я думаю, что это должно быть:
while (!feof(file)) {//legge finchè non finisce il file
fread(&acc_to_cmp, sizeof(acc_to_cmp), 1, file);//recupera un account dal file
if (!strcmp(account.matricola, acc_to_cmp.matricola)) {//se l'utente esiste
if (!strcmp(account.password, acc_to_cmp.password)) {//controlla la password
write(fd, (comm_t *)OK, sizeof(comm_t));//se coincidono concedi l'accesso
fclose(file);
return 1;
}
else{//se non coincidono
write(fd, (comm_t *)WRONG_PASS, sizeof(comm_t));//nega l'accesso
fclose(file);
return 0;
}
}
}//se l'utente non esiste
Функция зЬгстр возвращает 0, если две строки равны! :)
Вы используете TCP? Если это так, вам нужно тщательно проверить, сколько байтов вы действительно читаете, - TCP подвержен частичным «read()». И TCP - это поток - это означает, что когда вы читаете, вы можете получить результаты более чем одного 'write()' с другого конца соединения. –
Должен ли я использовать fullWrite и Fullread? –