как отслеживать элемент в двоичном файле - PullRequest
0 голосов
/ 09 июня 2018

У меня есть две структуры, подобные этой:

typedef struct user{
    char nick[NICKSIZE];
    char name[NAMESIZE];
    int n_messages;
    int n_following;
    int n_followers;
    following *arr_following;
    following *arr_unfollowed;
}user;

typedef struct user_pos {
    char nick[6];
    int position_in_file;
}user_pos;

Я хочу создать пользователя и вставить его в двоичный файл, но я также хочу отслеживать, где новый пользователь хранит свою позицию вuser_pos struct, так что позже я могу получить его с помощью fseek ()

void insert_user(char *input_a, char *input_b){
    user *new_user = malloc(sizeof(user));
    strcpy(new_user->name, input_b);
    strcpy(new_user->nick, input_a);
    new_user->n_following = 0;
    new_user->n_messages = 0;
    new_user->n_followers = 0;
    new_user->arr_following = malloc(sizeof(following));
    new_user->arr_unfollowed = malloc(sizeof(following)); 

    FILE *fp = fopen("data_base.bin", "ab+");
    fwrite(&new_user, sizeof(new_user),1,fp);

    user_pos *new_user_pos = malloc(sizeof(user_pos));
    strcpy(new_user_pos->nick, input_a);
    new_user_pos->position_in_file = ????

    (...)
}

Что именно я должен поместить сюда: new_user_pos->position_in_file = ???? и как будет выглядеть функция fseek () для получения элемента?

Заранее спасибо.

1 Ответ

0 голосов
/ 09 июня 2018

Вы можете использовать ftell() перед fwrite(), чтобы получить позицию в файле (т. Е. Байт, с которого началась запись).

Вы можете использовать fseek(fp, position_in_file, SEEK_SET), чтобы перейти к этой позиции позже.

Обязательно обрабатывайте коды возврата каждой функции - запись может завершиться неудачей, например, если диск заполнен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...