Bazı kimlik doğrulama eylemleri gerçekleştiren bir işlev yazıyorum. Böyle yapılandırılmış tüm user_id:password:flag
çiftler bir dosya var:EOF'ye Ulaşmak
Users.txt
user_123:a1b2:0 user_124:a2b1:1 user_125:a2b2:2
Bu kodudur:
int main(){
/*...*/
/*user_id, password retrieving*/
USRPSW* p = malloc(sizeof(USRPSW));
if(p == NULL){
fprintf(stderr, "Dynamic alloc error\n");
exit(EXIT_FAILURE);
}
memset((void*)p, 0, sizeof(USRPSW));
if(usr_psw_read(acc_sock_ds, p->user_id, USR_SIZE) <= 0){
printf("Failed read: connection with %s aborted.\n",
inet_ntoa(client_addr.sin_addr));
close(acc_sock_ds);
continue;
}
if(usr_psw_read(acc_sock_ds, p->password, PSW_SIZE) <= 0){
printf("Failed read: connection with %s aborted.\n",
inet_ntoa(client_addr.sin_addr));
close(acc_sock_ds);
continue;
}
/*Authentication through user_id, password*/
FILE *fd;
fd = fopen(USERSFILE, "r");
if(fd == NULL){
fprintf(stderr, "Users file opening error\n");
exit(EXIT_FAILURE);
}
char *usr_psw_line = malloc(USR_SIZE+PSW_SIZE+3+1);
if(usr_psw_line == NULL){
fprintf(stderr, "Dynamic alloc error\n");
exit(EXIT_FAILURE);
}
while(1){
memset((void*)usr_psw_line, 0, sizeof(USR_SIZE+PSW_SIZE+3+1));
fgets(usr_psw_line, USR_SIZE+PSW_SIZE+3+1, fd);
printf("%s\n", usr_psw_line);
fseek(fd, 1, SEEK_CUR);
/*EOF management*/
/*usr_id - password matching checking */
}
/*...*/
}
nasıl ulaşan EOF yönetebilir? EOF'ye ulaşıldığında, fgets
'un artık usr_psw_line düzenlemesi yapmadığını, ancak NULL işaretçisini döndürmediğini gördüm. EOF'a erişilirse, kullanıcı dosyasında hiçbir eşleşmenin bulunmadığı ve döngü kopuk olduğu anlamına gelir.
Birisi bana bazı ipuçları veya öneriler verebilir mi?
Dosya sonuna herhangi bir karakter okumadan ulaşılırsa, 'fgets'' NULL' döndürmekle yükümlüdür. Her neyse, "fgets" bir şey okumadan sonra 'feof (fd) 'yi kontrol edebilirsin. –
EOF'un ayarlanmadığından korkuyorum. İçerdeki kayıtları içeren bir dosya yazarım. Ayrıca açıkça EOF'yi ayarlamalı mıyım? Bunu nasıl yapıyorsun? –
Okurken dosyanın sonuna ulaşmak değil mi? EOF'yi ayarlamazsınız, eğer dosyanın sonuna ulaşılırsa, bir sonraki okuma denemesi bayrağı * fd'de ayarlayacaktır, bu yüzden her şey gerektiği gibi çalışıyorsa feof (fd) 'yi döndürecektir. . Her şey gerektiği gibi çalışmıyorsa, hmmm. –