C++编程-socket编程中为何要使用循环来调用阻塞式recv
你是否奇怪阻塞式接收recv这样的函数为什么要用一个for循环才能收全所有的内容?至少其中一种可能性是因为UNIX的信号处理机制。 在我的编程理念中,UNIX下的信号是一个徒增麻烦的东西,这也许是非控制台的Windows程序中没有信号的原因。 试想,如果你写了一个程序,无论是一个7*24的,还是一次性运行的,你通常期望它做完一段完整的工作后才被停下来,而不是在接收到一个也许你并不想要的信号直接就退出来。除非你在写一个初级的试验用的小程序,比如在写一个没有办法优雅关闭的死循环,不打算在正式的生产系统上使用,不需要
C++编程--多态的意义:流程的反转控制
我们在很多C++书籍中都会看到关于多态的例子,一般是写两个简单的类:class A{virtual int M1(){...};};class B:public class A{virtual init M1(){};};然后给出一个使用方法:B *b=new B;A *a=b;a->M1();此时执行B::M1();这个例子对于解释C++的多态语法是足够了,然而它没有揭示出我们为什么要用多态:既然我们能直接创建B,为什么我们不直接使用B.M1()呢?如果这样,多态与继承还有什么区别呢?有些书上会给稍微好一点的例子,再给一个函数:void test(A &a){a.M1();}然后给出一个使用方法:B *b=new B;test(*b); 这已经部分触
写在前面-我的程序观与方法论
本来要在CSDN上扎根,无奈CSDN实在太慢,还经常超时,就乔迁到这里来了。 2001年2月,我如愿以偿地成为一名程序员,迄今已整整7年。在7年的开发生涯中,有过无数次的兴奋与奋斗,也有过无数次的迷惘与挣扎。到了今天,度过了7年之痒后,终于形成了自认为合理的程序观与方法论。 2001年2月到2003年2月,整整两年都处在懵懂之中,记得当时用Socket编程,闹不明白端口是个啥东西,此类的例子比比皆是。2003年2月到2004年2月,第一次作为主力完成一个项目后,比较深刻的理解了C++基础编程、Socket编程、多线程编程等。从200