系统调用以填充结构值

时间:2014-07-30 04:00:26

标签: c pointers struct system-calls

我尝试使用系统调用填充struct值。我最初的努力如下。但是我从print语句中获取垃圾值。

int fd;
int nbytes;
struct message {
  char *from;
  char *to;
  int size;
};
struct message m1={"me","you",10};
struct message m2;

fd=creat("structfile",0644);
nbytes=write(fd,&m1,sizeof(m1));
read(fd,&m2,nbytes);

printf("%s %s %d",m2.from,m2.to,m2.size);

还有其他办法吗? (我正在考虑通过分别调用hostentdirent来直接填充gethostbynamereaddir等结构的方式。

2 个答案:

答案 0 :(得分:1)

问题1:

fd在哪里初始化?

问题2:

该行

nbytes=write(fd,&m1,sizeof(m1));

写出指针m1.fromm1.to的数值。它不会写出他们指向的字符串。

如果您要撰写m1的内容,则必须序列化m1.fromm1.to的内容。有为此目的的图书馆。您可以看到How to serialize data in C的一些参考资料。

答案 1 :(得分:1)

Problem 3,你的结构包含字符指针:

struct message {
  char *from;
  char *to;
  int size;
};

您的sizeof(m1)会写出2 (char *) pointersan (int)的大小。 fromto指向的数据可能会根据字符串的大小而有所不同。阅读sizeof(m1)没有考虑指向的字符串的大小。