c - 如何写入缓冲区(空指针)?

标签 c linux unix

我想将 2 个字符和一个位 vector (uint64_t) 写入文件,但我首先必须将它们全部写入缓冲区。然后缓冲区将被写入文件。我应该如何将这 3 个变量写入缓冲区(空指针),以便所有变量都包含在一个(空指针)变量中。

比如我要写

char a = 'a';
char b = 'b';
uint64_t c = 0x0000111100001111;

进入

void *buffer = malloc(sizeof(char)*2+sizeof(uint64_t));

然后使用

将其写入文件
write(fd, buffer, sizeof(char)*2+sizeof(uint64_t));

最佳答案

这是(几乎*)完全安全的做法:

uint8_t *buffer = malloc(2 + sizeof(uint64_t));
buffer[0] = a;
buffer[1] = b;
memcpy(buffer + 2, &c, sizeof(c));

您可能想做类似 *(uint64_t *)(buffer + 2) = c; 的操作,但由于对齐限制,这不可移植。

请注意,根据 C 标准中的定义,sizeof(char) == 1

(*) 我假定了 8 位 char,这几乎是通用的,但并非完全通用;在具有 16 位 char 的平台上,对 ab 也使用 memcpy

关于c - 如何写入缓冲区(空指针)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625707/

相关文章:

c - 名称中包含目标文件的 GNU Makefile 默认值变量

unix - 发送方和接收方应要求通过 ssh 传输文件?

c - 如何在保持纹理坐标正确的同时使用 glDrawElements?

c - 为什么我们调用 Signal Handler 两次?

html - 如何从终端运行 html 文件?

python - 如何在不设置shell路径的情况下将Anaconda与系统python隔离

c - 通过打开和读取来检测可用设备

bash - 解析另一个文件后获取文件中的第 N 行

KornShell 中的正则表达式

C 堆分配索引/访问