摘要: 当了4年码农,如今还在继续。不是因为工资高,而是我还保留着当初那份编码的激情。 新手编程 包括很多工作4,5年的程序员 常见毛病如下: 1>堆积代码问题,实现一个功能代码堆积如山,该封装成函数的不分装,很多地方都有重复代码。而且重复率大于2。 2>命名规范问题,变量函数都无特定命名,且没有注释阅读困难维护困难。 3> C++ 和 C 混用问题。 C重上使用全局变量,C++讲究封装。所以混用时候一定注意全局变量的定义使用。 4> 程序注释问题,意思表达不清楚 错误表达。 5> 代码优化问题,写过的代码从来不进行优化。 6> 急于动手问题,给一个任务,不加... 阅读全文
posted @ 2013-07-16 17:43 皁仩腄覺 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 注意:本章使用第十一章的源码直接编译生成可执行文件 不在生成库 一种简单的方法就是将所有源文件都设置到VPATH路径下。然后像普通makefile 生成。我们不讨论这种情况。 先来看我们程序的目录组织结构 --- main.c ---common.h ---addsub --- add.c --- sub.c ---muldiv --- mul.c --- div.c Makefile组织: 1、各个子目录单独使用Makefile,主要生成相关的库,或者目标文件; 2、顶层Makefile负责将本目录下源代码文件编译成目标文件... 阅读全文
posted @ 2013-07-16 17:36 皁仩腄覺 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 工程中很多时候都会使用别人经过验证的库,或者第三方提供的库,现在很多工程中实际开发中是以库的形式对外发布,库主要分为静态库和动态库。 静态库: 编译时候加载进目标文件内部。程序运行时不需要该库。命名libxxx.a 动态库: 编译时链接至目标文件,只在目标文件内部指出连接地址。程序运行时加载动态库。 命名libxxx.so; 实例讲解: 本章实现 加法 、减法静态库,然后实现乘法、除法动态库。然后在main中调用。 现将每个文件代码列出如下: 注意:源代码拷贝编译可能通不过,原因是有些括号是中文符号。改之则可。 //add.cint addNum(int a,... 阅读全文
posted @ 2013-07-16 17:36 皁仩腄覺 阅读(177) 评论(0) 推荐(0) 编辑
摘要: (1 )errno 在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述。每个线程都有自己的errno,根据errno值的不同,我们就可以知道自己的程序发生了什么错误,然后进行相应的处理。 errno这个全局变量在, extern int * __errno_location(void); #define errno (*__errno_location())。关于errno有三点需要特别注意: 1> 如果系统调用或库函数正确执行的话,errno的值是不会被清零。所以,在利用errno之前,最好先对函数的返回值进行判断,看是否发生了错误,返回值错误再利用errno判断 阅读全文
posted @ 2013-07-16 17:01 皁仩腄覺 阅读(286) 评论(0) 推荐(0) 编辑
摘要: (1) 阻塞模型 没有数据到达时候程序会一直阻塞直到有数据到达 如tcp 的recv 函数,当然也可以设置超时。(2)非阻塞I/O模型 通过fcntl函数设置socket 非阻塞模型 fcntl(sockfd, F_SETFL, O_NONBLOCK);如果没有数据到达会返回一个错误码。一般对于一般都对非阻塞I/O模型进行轮询,就是一直在检查这个状态,查看有无数据到达。(3)3. I/O复用模型 select模型 (重点) 利用select函数,判断套接字上是否存在数据,或者能否向一个套接字写入数据。目的是防止应用程序在套接字处于锁定模式时,调用recv(或send)从没有数据的套接字上... 阅读全文
posted @ 2013-07-16 15:19 皁仩腄覺 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 很多时候我们要开发 服务器程序应用linux 和windows平台,很多时候得两套开发代码。我这里选择跨平台开发,已经在windows7 和 ubuntu 12.04 下,经过测试,windows 称服务,linux称守护进程,本质都是一样。 如果对服务守护进程不是很了解,可以参考【linux c 速学笔记】/【守护进程与socket编程】一章 ttp://www.cnblogs.com/wolfrickwang/p/3192949.html 关于命名规范问题,由于本程序在windows 平台下面编写,linux 下面测试 所以命名规范偏向windows 平台开发惯用命名规范。 现将... 阅读全文
posted @ 2013-07-16 11:15 皁仩腄覺 阅读(498) 评论(0) 推荐(0) 编辑
摘要: (一) 守护进程 守护进程(Daemon)是指那些随着系统启动,一直运行于系统整个生命周期的系统程序,它们一般不受用户登录注销影响。 它独立于控制终端并且周期性地执行某种任务或等待。 会话(session)是一个多个进程组的集合,每个进程都有一个父进程并且属于一个进程组,每个进程组都有一个进程组号,该号等于该进程组组长的PID号,一个进程只能为它自己或子进程设置进程组ID号。 每个进程都属于一个进程组,而进程组又属于某个会话。当用户从终端登录系统(不管是终端还是伪终端),系统会创建一个新的会话。在该终端上启动的进程都会被系统划归到会话的进程组中。 会话中的进程通过该会话中的领头进程... 阅读全文
posted @ 2013-07-16 11:15 皁仩腄覺 阅读(864) 评论(0) 推荐(0) 编辑