30dayMakeCppServer
30dayMakeCppServer copied to clipboard
day2有点问题
我的运行环境是vmware运行的centos7,使用make编译时显示“printf在此作用域中尚未声明”与“scanf在此作用域中尚未声明”,后在client.cpp与server.cpp中加入#include
另外,在day3中有个判断条件是(errno == EAGAIN) || (errno == EWOULDBLOCK),我查阅资料后发现,EAGAIN与EWOULDBLOCK是完全相同的宏,不明白为什么这里要用或关系
- 很入门的C/C++问题,建议先打好语言基础。
- 在标准中,EAGAIN被定义为资源短暂不可用,而EWOULDBLOCK被定义为操作阻塞,从定义上这两者不是一个概念。 在某些较老的unix系统中,这两者可能有不一样的实现。但对于GNU的libc库,这两者相同,从源码可以看到:
/* non-blocking and interrupt i/o */
#define EAGAIN 35 /* Resource temporarily unavailable */
#define EWOULDBLOCK EAGAIN /* Operation would block */
这两者定义为相同可能是为了g++编译器、os的实现方便,在编程时,需要认识清楚,可以参考《UNIX网络编程》非阻塞式编程相关章节。 这样用或操作,有两个好处:
- 程序逻辑更加健壮,让程序处理了资源短暂不可用、操作阻塞两种情况。
- 兼容了其他所有没有将EWOULDBLOCK和EAGAIN定义为相同的系统。
很入门的C/C++问题,建议先打好语言基础。
在标准中,EAGAIN被定义为资源短暂不可用,而EWOULDBLOCK被定义为操作阻塞,从定义上这两者不是一个概念。
在某些较老的unix系统中,这两者可能有不一样的实现。但对于GNU的libc库,这两者相同,从源码可以看到:
/* non-blocking and interrupt i/o */ #define EAGAIN 35 /* Resource temporarily unavailable */ #define EWOULDBLOCK EAGAIN /* Operation would block */
这两者定义为相同可能是为了g++编译器、os的实现方便,在编程时,需要认识清楚,可以参考《UNIX网络编程》非阻塞式编程相关章节。
这样用或操作,有两个好处:
程序逻辑更加健壮,让程序处理了资源短暂不可用、操作阻塞两种情况。
兼容了其他所有没有将EWOULDBLOCK和EAGAIN定义为相同的系统。
大佬之后还会更新吗,最近在学习网络编程,觉得您写的教程特别易懂!