c - CMSG_ALIGN 宏的值是多少

标签 c linux sockets

CMSG_ALIGN(i) 的值是 8 和 >=i 的倍数的最小值是否正确,如果 i是无符号整型变量吗?

#include <stdio.h>

int main(void) 
{
    int i;

    for (i=0; i<50; ++i) {
        printf("%d\n", CMSG_ALIGN(i));
    }
}

我得到的输出:

/*       i              CMSG_ALIGN(i)
 *
 *       0                     0
 *       [1,8]                 8
 *       [9,16]                16
 */

最佳答案

Is it right to say the value of CMSG_ALIGN(i) is the minimum value of multiple of 8 and >=i if i is an unsigned int variable?

没有。给定值的对齐方式不一定在所有平台上都是 8。如果它总是 8,则根本不需要 CMSG_ALIGN()

您可能使用的是 64 位系统。所以它在 8 字节边界上对齐。但是如果您在 32 位平台上运行相同的代码,您可能会看到它是 4 字节对齐。

请注意 CMCG_ALIGN()返回 size_t。所以 %zu 是打印 size_t 值的正确格式字符串。

关于c - CMSG_ALIGN 宏的值是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34674971/

相关文章:

c - 如何判断文件是否为空?

C 编程语言练习 1-18

c - 如何释放 C 中的 union 数组?

javascript - 将模块安装为全局变量时出现问题 --/usr/bin/env 不是目录

linux - 如何从命令行在sqlite3中创建数据库

c - 尝试从 wininet HTTP 连接获取套接字

c - 使用线程实现进度控制

c - 使用 unix shell 测试系统的字节顺序

Linux内核与用户空间程序的通信

sockets - 带有 WSASend 和 OVERLAPPED 池的 IOCP