linux 中 read 函数的疑问 ? 为什么要绕圈?
linux 中 read 函数, 查 man 手册为:
ssize_t read(int fd, void *buf, size_t count);
查头文件:
unistd.h 中定义
__extern_always_inline __wur ssize_t
read (int __fd, void *__buf, size_t __nbytes)
在monetary.h 中定义
#ifndef __ssize_t_defined
typedef __ssize_t ssize_t;
# define __ssize_t_defined
#endif
在bits/types.h 中有定义
__STD_TYPE __SSIZE_T_TYPE __ssize_t; /* Type of a byte count, or error. */
# define __STD_TYPE __extension__ typedef
在typesizes.h 中有定义
#define __SSIZE_T_TYPE __SWORD_TYPE
在bits/types.h 中
# define __SWORD_TYPE long int
就是说, ssize_t 就是 long int.
谁能告诉我, 头文件中绕了这么一大圈,到底是为什么。 难道它就不能直接一次定义吗?
例如:形如
#ifdef __WORDSIZE == 32
# define ssize_t int
#elif __WORDSIZE == 64
# define ssize_t long int
#endif
------解决方案--------------------楼主想法很好,个人猜想,可能涉及到glibc的演化,原因应该是比较复杂的
单个平台的实现简单,要跨众多平台的话将会涉及到很多问题,各种宏,各种编译条件。
------解决方案--------------------主要是为了跨多个系统平台,多个cpu平台,cpu还分位数等等。
------解决方案--------------------兼容性的问题吧!通用型强