深信服面经

字符复制函数:

https://www.cnblogs.com/lxy-xf/p/11517873.html

问题主要有两个:

1.缓冲区溢出:如果src的长度大于dst的长度,则将赋值到dst的\0外,造成缓冲区溢出。

2.内存重叠:如果dst位于src和src+strlen(src)之间,则如果从头开始复制会造成内存重叠,如果以\0为终止的方式复制则永远不会停止下来

strcpy,strncpy,strlcpy:

strcpy:

传入 dst和src,以\0为终止,可能造成缓冲区溢出

strncpy:

复制n个字符到dst区域,结尾不加\0.

strlcpy:

strcpy的安全版本,传入参数为dst,src和sizeof(dst)。如果src大于dst的长度,则会截断为sizeof(dst)大小而防止缓冲区溢出。

内存对齐:

https://www.douban.com/group/topic/128339995/

1.数据成员的对齐:放置在min(数据成员长度,默认对齐长度)的整数倍位置

2.结构体整体对齐:补齐min(最大数据成员长度,默认对齐长度)的整数倍位置

string的实现

https://www.cnblogs.com/zhizhan/p/4876093.html

如何向其他进程发信号

kill函数

UDP使用connect,bind:

UDP是一个无连接的协议,因此socket函数connect似乎对UDP是没有意义的, 然而事实不是这样。 一个插口有几个属性,其中包括协议,本地地址/端口,目的地址/端口。 对于UDP来说,socket函数建立一个插口;bind函数指明了本地地址/端口 (包括ADDR_ANY,通配所有本地网络接口);connect可以用来指明目的地 址/端口; 一般来说,UDP客户端在建立了插口后会直接用sendto函数发送数据,需要 在sendto函数的参数里指明目的地址/端口。如果一个UDP客户端在建立了插 口后首先用connect函数指明了目的地址/端口,然后也可以用send函数发送 数据,因为此时send函数已经知道对方地址/端口,用getsockname也可以得 到这个信息。 UDP客户端在建立了插口后会直接用sendto函数发送数据,还隐含了一个操作, 那就是在发送数据之前,UDP会首先为该插口选择一个独立的UDP端口(在1024 -5000之间),将该插口置为已绑定状态。如果一个UDP客户端在建立了插口后 首先用bind函数指明了本地地址/端口,也是可以的,这样可以强迫UDP使用指 定的端口发送数据。(事实上,UDP无所谓服务器和客户端,这里的界限已经模 糊了。) UDP服务器也可以使用connect,如上面所述,connect可以用来指明目的地址 /端口;这将导致服务器只接受特定一个主机的请求。

socket相关函数

判断大小端

猜你喜欢

转载自www.cnblogs.com/lxy-xf/p/11668620.html