2016-09-19 6 views
0

открыть файл, рамки SimGrid:Msg_file_get_data в SimGrid

msg_file_t file = MSG_file_open("/scratch/bin/tesh", NULL); 
XBT_INFO("file size is %zd", MSG_file_get_size(file)); 

Это нормально:

[carl:host:(1) 0.000000] [remote_io/INFO] file size is 356434 

Тогда я хочу установить некоторые данные в этот файл. Во-первых, я создаю ЬурейеЕ структуру:

typedef struct { 
    char* number_used; 
}data, *dataPtr; 

Затем я поставил данные с MSG_file_set_data на данный файл:

dataPtr data_1 = xbt_new(data, 1); 
data_1->number_used = xbt_strdup("1"); 
MSG_file_set_data(file, data); 

Но после закрытия файла я не могу получить значение data_1->number_used:

file = MSG_file_open("/scratch/bin/tesh", NULL); 
dataPtr data_2 = MSG_file_get_data(file); 
XBT_INFO("number used %s", data_2->number_used); 

Дает segmentation fault, а значение data_2 - null. Что я сделал не так?

ответ

2

Объект msg_file_t существует только между вызовами MSG_file_open и MSG_file_close. Вызов снова MSG_file_open по тому же имени файла создает новый объект msg_file_t (новый дескриптор). Затем пользовательские данные, прикрепленные к файлу msg_file_t, являются не постоянными через несколько открывать/закрывать имя файла.

+0

Каков возможный способ преодолеть это? –