保存和从文件中提取数据

时间:2012-11-10 21:21:32

标签: c

我正在使用C语言在Linux OS(ubuntu 12.04)上开发路由协议。我的问题是我需要将路由表保存在外部文件中,这样如果程序关闭或计算机关闭,程序应该能够在重新启动时从文件中获取路由表。

最简单的解决方案是什么?如果你能解释一下,我将不胜感激。如果它可以帮助您回答,我将表struct routing user_list[40]保存在下面:较小的索引在表中具有较高的优先级。

struct routing {
   int hop_distance;
   char senderID[16]; // 192.168.001.122
   char gateway[16];
};

struct routing user_list[40] = { [0] = {0, {0}, {0}, {0} } };

提前谢谢。

2 个答案:

答案 0 :(得分:2)

人类恐惧

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
...
RETURN VALUE
fread()  and  fwrite() return the number of items successfully read or written (i.e., not the number of charac‐
ters).  If an error occurs, or the end-of-file is reached, the return value is a short item count (or zero).

最简单的解决方案

int nb_written = fwrite(&user_list, sizeof(struct routing), 40, myfile);
int nb_read = fread(&user_list, sizeof(struct routing), 40, myfile);

如评论中所示:

  • 由于依赖于体系结构的int类型,生成的文件将不可移植。
  • 必须检查返回的值以处理错误

答案 1 :(得分:1)

请参阅readwrite以保存此数据。将IP地址存储为二进制(即4个字节)。