【问题标题】:Msg_file_get_data in SimGridSimGrid 中的 Msg_file_get_data
【发布时间】:2016-09-19 19:25:09
【问题描述】:

我通过 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 faultdata_2 的值是null。我做错了什么?

【问题讨论】:

    标签: simgrid


    【解决方案1】:

    msg_file_t 对象仅存在于 MSG_file_open 和 MSG_file_close 调用之间。在同一个文件名上再次调用 MSG_file_open 会创建一个新的 msg_file_t 对象(一个新的描述符)。然后附加到 msg_file_t 的用户数据在文件名上的多次打开/关闭中不是持久的

    【讨论】:

    • 有什么办法可以克服?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2016-09-05
    相关资源
    最近更新 更多