「生活可以更简单, 欢迎来到我的开源世界」
  1. 1
  2. 2
unp代码相关修正
2019-12-07
」 「

unp代码相关修正

1

tcpservpoll01.c:13: error: ‘OPEN_MAX’ undeclared (first use in this function)

OPEN_MAX 在 /usr/inlude/limits.h 已经不存在了

猜测:

/usr/include/linux/fd.h/usr/include/linux/limit.h里的 NR_OPEN 就是作者所说的 OPEN_MAX

Solution 1: OPEN_MAX –> NR_OPEN, 连 #include 这句都不用更改

Solution 2: 在 unp.h 里面手动添加 #define OPEN_MAX 1024, 这个 1024 从上面所说 NR_OPEN 的值得到,

2

tcpservpoll01.c:28: error: ‘POLLRDNORM’ undeclared

原因:

usr/include/sys/poll.h里使用了feature.h,必须在任何使用 feature.h 的文件之前有 #define __XOPEN_SOURCE 的语句

usr/include/sys/poll.h 缺少如下语句:

#ifdef __USE_XOPEN
/* These values are defined in XPG4.2. */
# define POLLRDNORM 0x040 /* Normal data may be read. */
# define POLLRDBAND 0x080 /* Priority data may be read. */
# define POLLWRNORM 0x100 /* Writing now will not block. */
# define POLLWRBAND 0x200 /* Priority data may be written. */
#endif

据闻:64位的相关文件里面是有定义的,而32位的Linux里面没有此相关定义。

我的poll.h里是有相关定义的,但是引用编译时仍然会报错。

Solution :在 unp.h 里面自己定义这些东西,否则,就是编译内核的时候添加 _XOPEN_SOURCE 选项了

我的解决办法:将.c文件改成.cc文件,使用g++编译成功

<⇧>