【发布时间】:2013-05-06 14:39:54
【问题描述】:
我正在用 C 语言编写一些套接字函数,但遇到了这个问题。 我有一个包含三个字段的结构:
typedef struct {
char type;
unsigned int length;
char *buffer;
} message_t;
我需要包装在相同的字符串(类型、长度、缓冲区)中,然后以原子方式将其写入套接字中。之后使用 read 函数,我需要读取消息并将三个字段插入同一个结构中。我不明白如何将 int 转换为固定长度的字符串。
【问题讨论】:
-
你想做一些serialization。您可以使用二进制数据格式(例如 XDR 等...)或使用文本格式(JSON、YAML、XML 等...)...
-
为什么要将 int 转换为字符串?只需将结构写入您的套接字即可。因为你是 AF_UNIX,所以你在同一台机器上,这简化了事情。
-
这是一个大学项目,我无法更改具体内容。
-
@mah: 如果消息接收端的机器是 SPARC 或 PowerPC 机器,但发送端的机器是 Intel 机器,那么只需将结构写入套接字流即可导致误解,因为发送方是小端机器,接收方是大端机器,
unsigned int中的字节顺序会有所不同。此外,结构中有填充字节,结构中指针的地址在接收机器上是没有意义的(不管字节序)。你必须复制指向的数据! -
@mah:只有在写入日期的进程读取日期时,才向套接字写入指针(在本例中为
char * buffer)才有意义。
标签: c sockets system-calls