Msg_file_get_data 在 SimGrid 中
Msg_file_get_data in SimGrid
我用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 结构:
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
。我做错了什么?
msg_file_t 对象仅存在于 MSG_file_open 和 MSG_file_close 调用之间。对同一文件名再次调用 MSG_file_open 会创建一个新的 msg_file_t 对象(一个新的描述符)。然后附加到 msg_file_t 的用户数据在文件名的多个 open/close 中 不持久 。
我用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 结构:
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
。我做错了什么?
msg_file_t 对象仅存在于 MSG_file_open 和 MSG_file_close 调用之间。对同一文件名再次调用 MSG_file_open 会创建一个新的 msg_file_t 对象(一个新的描述符)。然后附加到 msg_file_t 的用户数据在文件名的多个 open/close 中 不持久 。