【发布时间】:2014-03-24 23:48:15
【问题描述】:
我在 C 中定义了以下结构,我想使用伯克利套接字通过 Linux 中客户端和服务器之间的 TCP 连接 发送它:
struct Argument{
int pid;
int length;
chat op;
char *data;
};
由于我有“char *data”,它是一个指针,可用于在本地发送机器中分配可变大小的数据,我必须在两次不同的时间将此结构发送到接收方。 第一次,我只发送固定变量,即前三个变量。然后在接收时,我分配一个长度大小的缓冲区来第二次接收数据部分。
所以我的问题是无论如何只能将此结构以可变数据字段大小发送到另一侧,而不是我在做什么的两倍?
if (write(peer_fd, (struct Argument*) arg, sizeof (struct Argument)) < 0)
{
close(peer_fd);
return -1;
}
非常感谢。
【问题讨论】:
-
如果你在分配结构时知道
data的大小,你可以使用长度为0的数组。 -
@Nick 如果您有完全合法的解决方案,为什么要使用 hack?
-
只是扔在那里,OP 似乎想要一个块。此外,它们在我住的地方是完全合法的:)
-
@Nick 正确的做法是使用灵活的数组成员,0 长度数组是对某些编译器的扩展,我怀疑 c 标准对它们有什么积极的说法。
-
你说得对,实际上我的意思是灵活的数组成员。我的错。
标签: c linux berkeley-sockets