相关疑难解决方法(0)

GCC的__attribute __((__ packed__))是否保留原始排序?

目的

我正在用C语言编写一个网络程序(特别是gnu89),我希望通过重新解释一个特定的struct X大字节数组(也就是说char),通过网络发送字节,并struct X在另一方面重新解释它们来简化事情.为此我决定使用gcc的__attribute __((__ packed__)).我已尽最大努力确保正确完成(即我已经考虑了字节序和其他相关问题).

除了保证struct X尽可能小,gcc是否保证struct使用__attribute __((__ packed__))定义的保留原始排序?我已经做了相当多的搜索,我还没有找到关于这种保证是否存在的任何文件.

笔记

可以安全地假设发送方和接收方都不会遇到可移植性问题(例如sizeof(int),在服务器上等于sizeof(int)客户端).

c compiler-construction networking gcc struct

25
推荐指数
2
解决办法
1万
查看次数

在c中通过tcp socket发送struct

我有一个结构:

typedef     struct {
    char            *typ;
    cid_t           cid;
    unsigned short  nbytes;
    char            *data;
} req_s; 

typedef     struct {
    char            *ip;
    unsigned short  pid;
} cid_t;
Run Code Online (Sandbox Code Playgroud)

我想通过tcp套接字发送它.那可能吗?我做到了:

req_s answer;
...

if( send(sock, (void*)&answer, sizeof(answer),0) < 0 ) {
    printf("send failed!\n");
}

...

recv ( socketDesc, (void*)&answer, sizeof(answer), 0) >= 0)
Run Code Online (Sandbox Code Playgroud)

但如果我想阅读溃败我的结构答案,我只会得到一些象形文字

或者是否有更好的方法将我的数据从客户端发送到服务器并返回?

c sockets struct tcp

7
推荐指数
2
解决办法
4万
查看次数

标签 统计

c ×2

struct ×2

compiler-construction ×1

gcc ×1

networking ×1

sockets ×1

tcp ×1