当前位置: 技术问答>linux和unix
linux 中 read 函数的疑问 ? 为什么要绕圈?
来源: 互联网 发布时间:2017-05-07
本文导语: 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 t...
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
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还分位数等等。
|
兼容性的问题吧!通用型强