进无止进 发表于 2016-09-19 23:28

网络字节序和本地字节序转换函数的原型在哪个目录

请问下Linux下网络字节序和本地字节序转换函数在Linux系统的哪个目录啊,怎么找到实现的代码
uint32_t htonl(uint32_t hostint32);uint16_t htons(uint16_t hostint16);uint32_t ntohl(uint32_t netint32);uint16_t ntohs(uint16_t netint16);也就是以上四个函数的实现代码

MMMIX 发表于 2016-09-20 00:59

回复 1# 进无止进

Those are implemented in Glibc:
https://sourceware.org/git/?p=gl ... net/htonl.c;hb=HEAD
https://sourceware.org/git/?p=gl ... net/htons.c;hb=HEAD


进无止进 发表于 2016-09-20 23:30

回复 2# MMMIX
谢谢,但我还有点不明白,当从网络字节序向本地字节序转换的时候,它怎么判断CPU的大小端模式呢?我知道操作系统自身已经定义了大下端模式,但CPU的大小端模式是怎么确定的呢?



MMMIX 发表于 2016-09-21 09:57

回复 3# 进无止进

在代码的编译(预处理)阶段就已经可以确定了。代码的大小端要和CPU的大小端匹配,要不然也没办法跑。

进无止进 发表于 2016-09-25 09:11

回复 2# MMMIX

找了好久,没有看到下面这两个函数的实现
uint32_t ntohl(uint32_t netint32);uint16_t ntohs(uint16_t netint16);
那个weak_alias的作用是说这两对函数的实现原理一样吗?

MMMIX 发表于 2016-09-25 14:46

回复 5# 进无止进

那个weak_alias的作用是说这两对函数的实现原理一样吗?


weak_alias (htonl, ntohl)

的作用是说,如果你没有额外提供 ntohl 的实现,那么 ntohl 就是 htonl。

进无止进 发表于 2016-09-26 07:39

回复 6# MMMIX
哦,那这里我可以认为 ntohl和htonl实现是一样的?我没找到htonl的实现



MMMIX 发表于 2016-09-26 14:59

回复 7# 进无止进



那这里我可以认为 ntohl和htonl实现是一样的?


Yes.
页: [1]
查看完整版本: 网络字节序和本地字节序转换函数的原型在哪个目录