前段时间发现服务器出现大量TIME_WAIT状态的连接,于是查了一下产生的原因与避免的方法。需要练了解一下这个结构体:
struct linger {
int l_onoff; /* 0 = off, nozero = on */
int l_linger; /* linger time */
};
前段时间发现服务器出现大量TIME_WAIT状态的连接,于是查了一下产生的原因与避免的方法。需要练了解一下这个结构体:
struct linger {
int l_onoff; /* 0 = off, nozero = on */
int l_linger; /* linger time */
};
结构体struct tm
struct tm
{
int tm_sec; /* 秒,取值区间为[0,59] */
int tm_min; /* 分,取值区间为[0,59] */
int tm_hour; /* 时,取值区间为[0,23] */
int tm_mday; /* 日期,取值区间为[1,31] */
int tm_mon; /* 月份,取值区间为[0,11] (0代表一月) */
int tm_year; /* 年份,其值从1900开始 */
int tm_wday; /* 星期–取值区间为[0,6],其中0代表星期天 */
int tm_yday; /* 从每年的1月1日开始的天数–取值区间为[0,365],其中0代表1月1日 */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正;不实行夏令时的进候,tm_isdst为0*/
long int tm_gmtoff; /*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/
const char *tm_zone; /*当前时区的名字(与环境变量TZ有关)*/
};
之前试过在Linux中mount -t cifs的方式挂载windows的共享目录,但这是通过网络挂载,有时拔掉网线或者IP冲突时经常掉线,有时编译大文件频繁读写时也出问题。所以就使用直接挂载vmware共享文件夹的方式,比较稳定。
ubuntu server服务器版和ubuntu desktop 桌面版安装vmware-tools最大的区别就是没有图形界面,需要通过命令行挂载才能找到vmware-tools的安装包。
项目中需要判断局域网内某个IP是否被占用,一开始想到的是ping命令,但是ping只能判断同一网段的IP。后来发现linux使用arping命令可以判断,如使用arping -D -f -w 1 x.x.x.x
但是对于经过裁剪的嵌入式linux,busybox中不一定还保留arping命令,而且C代码中调用shell命令需要临时创建一个子进程来执行,频繁操作会浪费资源。于是决定参考busybox源码中的arping.c自己实现C代码socket的ARP,以下代码是从busybox的arping.c中提取的。
用了很久的Linux,感觉还是对Makefile不够熟悉,经常为一个复杂一点的项目的Makefile折腾半天。现在对Makefile的基本写法做一下总结,方便以后查阅。
这里用我近期写的一个Makefile做讲解,是一个C与C++混编的项目。并附上完整的Makefile内容。
我之前写过一篇《web无插件解码播放H264/H265(js解码HTML5播放)》,与本文的项目意义基本一致,不同的是实现方案有一定差异。之前介绍的是纯JS解码,本文介绍WebAssembly解码。