在http://pubs.opengroup.org/onlinepubs/009695399/functions/send.html读取套接字send
的POSIX参考我想知道,它们究竟是什么意思“字节” - 它的传统/历史含义,隐含/流行含义,还是完全不同的东西?我正在开发一个二进制TCP / IP支持的网络协议客户端 - 服务器程序,我想正确声明我用来传递给recv
的缓冲区,并能够正确解压缩其数据。
是的,我知道这几乎是一个假设的问题,可能有一百万人有机会遇到真正的问题,但是我觉得比安慰更安全。
那么,POSIX的人是否真的意味着八位字节,或者他们是否真的暗示对于一个字节说的平台,7位,send
将处理粒度为7 * N的数组?或者它可能只是逐位传输所有数据(大小粒度(7 * n_bytes)
位)?我的意思是,因为它需要一个void *
缓冲区......
我的recv
缓冲区的哪个声明在架构和编译器中最稳定?
我正在使用带有以下标志的GCC(C99,POSIX):
cc -g -Wall -Wextra -std=c99 -pedantic -fexec-charset=ISO-8859-1 -DDEBUG -D_POSIX_C_SOURCE
答案 0 :(得分:2)
我认为该字节是C的char
类型,是系统支持的最小可能的小整数。 (也许一些奇怪的编译器+目标系统确实有非8位char
)。
octet
表示8位字节。
如果您考虑TCP / IP,我相信(IIRC)它以8位字节的形式定义了各种协议。 TCP由多个8位字节的传输组成。
但实际上,你不应该那么在意。也许用比特来记录你的协议可能有所帮助。很多事情都会使你的协议过时(只考虑IPv6)。如果你的协议非常有价值和有用,并且有很好的文档记录,那么有人会让它生动并适应它。
答案 1 :(得分:2)
POSIX将字节定义为八位字节的大小,并将八位字节定义为8个连续位。这个定义在POSIX标准的第3章中,最新的POSIX标准(2008)在http://pubs.opengroup.org/onlinepubs/9699919799/