日期:2014-05-16  浏览次数:20678 次

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还分位数等等。
------解决方案--------------------
兼容性的问题吧!通用型强