2016-09-19 2 views
0

I-Datei öffnen, indem SimGrid Rahmen:Msg_file_get_data in SimGrid

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

Es ist OK:

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

Dann habe ich einige Daten in diese Datei festlegen möchten. Zunächst erstelle ich typedef Struktur:

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

Dann habe ich Daten mit MSG_file_set_data auf diese Datei:

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

Aber nach Schließen der Datei kann ich nicht den Wert von data_1->number_used erhalten:

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); 

Es gibt segmentation fault und der Wert data_2 ist null. Was habe ich falsch gemacht?

Antwort

2

Ein Objekt msg_file_t existiert nur zwischen den Aufrufen MSG_file_open und MSG_file_close. Durch erneutes Aufrufen von MSG_file_open unter demselben Dateinamen wird ein neues Objekt msg_file_t (ein neuer Deskriptor) erstellt. Dann sind die an eine msg_file_t angehängten Benutzerdaten nicht persistent über mehrere Öffnen/Schließen eines Dateinamens.

+0

Was ist der mögliche Weg, um darüber zu kommen? –

Verwandte Themen