c开发
xixihaha331
这个作者很懒,什么都没留下…
展开
-
包裹函数
包裹函数其实是对函数进行封装。将所有可能出现的情况写在一起,以便于程序的调用,提高程序的可读性。 包裹函数和标准函数一样,只是首字母变成大写。例子: (1)malloc的包裹函数Malloc原创 2015-11-17 21:21:53 · 1641 阅读 · 0 评论 -
strchr strrchr strcmp的实现
strchr的实现#include char *my_strchr(const char *string, char ch){ const char *str = string; char *p_char = NULL; if(NULL == string){ return p_char; } while(*原创 2016-04-22 20:43:53 · 286 阅读 · 0 评论 -
为什么只需三次握手而挥手要四次
自己的理解,内容虽短但很好理解 当服务端的LISTEN状态下的socket当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答的作用,SYN起建立连接的作用)放到一个报文里来发送,但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发给你了,但未必你所有的数据都全部发送给对方了,所以你可能未必去马上关闭socket,也可能你你需要发送一些数据给对方后再发原创 2016-04-10 19:00:10 · 347 阅读 · 0 评论 -
UDP协议的用途
目前我们用的大多数应用层的协议都是基于TCP的,例如:telent, ftp, http, https, smtp.很少有基于UDPy协议的应用层的协议。 那么UDP协议到底有什么作用呢? 首先我们比较下TCP与UDP协议的差别(1)连接与无连接 TCP是面向连接的,UDP是面向无连接的。因此导致TCP更适合于消息的多播发布可以向多个点传送消息(因为没有原创 2016-04-08 17:21:54 · 7869 阅读 · 0 评论 -
阻塞非阻塞与异步同步问题
通常IO操作分为两个步骤:(1)IO请求 (2)实际的IO操作阻塞和非阻塞的区别是发生在(1)过程中的,发生在内核中。同步异步的区别是发生在(2)过程中的。发生在应用程序与内核的交互中。如下面的图所示阻塞非阻塞得区别发生在等待数据的那个阶段,而将数据从内核空间复制到用户空间的阶段是相同的。阻塞:应用程序请求IO操作的时候,如果数据没有准备好,请求不即刻返回。可以看到在等待数据阶段没原创 2016-04-07 21:02:11 · 428 阅读 · 0 评论 -
库函数与系统调用
系统调用 通常shell是通过系统调用将底层硬件功能向上层应用程序提供,(linux的系统调用约有300多个)。因为系统调用不考虑平台差异性,由内核直接提供,因此移植性较差。库函数 库函数是由用户或组织自己开发的,具有一定功能的函数集合(例如,如果用户要让声卡发生,可能要调用好多个系统调用,而且系统调用有严格的顺序,则为了简化这个复杂流程,则将这些能让声卡发生的系统调用和执原创 2016-04-06 21:19:16 · 1437 阅读 · 0 评论 -
判断两个无符号整形相加产生溢出
假设两个int类型的变量x和y,且x,y都小于2的32次方。如果x+y产生溢出,则sum=x+y-2的32次方。则可以推出sum-x=y-2的32次方。所以sum-x 溢出检测函数: int smashing(unsigned int i, unsigned int j) { int sum = 0; sum = (in原创 2015-11-09 19:48:48 · 1928 阅读 · 0 评论 -
有符号数溢出的判断
对于两个w位宽的有符号整数来说, 其能够表示的范围在-2的w-1次方到2的w次方-1之间。因此有两种情况能够使两个数相加溢出。 (1)同符号数相加 (2)异符号数相减 如果溢出,那么相加的结果超过了能够表示的范围,则有可能出现两个正数相加得到一个负数,所以相加的结果小于两个加数。或两个负数相加得到一个正数,所以相加的结果大于两个加数。原创 2015-11-12 19:56:06 · 7101 阅读 · 0 评论 -
rand()函数生成随机数
rand()函数和srand()是两个产生随机数的函数。 函数一:int rand(void) 返回一个[0, RAND_MAX]间的随机整数。 函数二:void srand(unsigned seed) 参数seed是rand()的种子。 用法: 系统在调用rand原创 2015-11-15 23:32:19 · 2684 阅读 · 0 评论 -
线程资源销毁
最近写代码发现一个问题:线程销毁,线程的资源没有立即释放,只有在主进程销毁的时候才释放。怎么将不用的线程资源销毁,有下面的两种方法:线程分为可结合的(joinable)和 分离的(detached)两种,如果没有在创建线程时设置线程的属性为PTHREAD_CREATE_DETACHED,则线程默认是可结合的。可结合的线程在线程退出后不会立即释放资源,必须要调用pthread_join来...原创 2019-09-26 19:56:19 · 2198 阅读 · 0 评论