Linux知识
文章平均质量分 60
奋斗的蜗牛2013
这个作者很懒,什么都没留下…
展开
-
aarch64平台nopoll移植
0x01前言最近项目用到了websocket,websocket相对应的库比较多,但是大多数基于C++实现,有一些还需要C++11及以上特性,对于嵌入式的一些应用场景不是特别友好,在网上查阅后发现nopoll采用C语言实现,能够更好的支持老版本的GCC编译器和开发环境,因此暂时选择nopoll,大家有更好的欢迎推荐。下面进入正题,开始aarch64平台移植nopoll。0x02下载nopollnopoll官网提供编译好的二进制安装包,官网http://www.aspl.es/nopoll/dow原创 2021-01-12 14:42:46 · 792 阅读 · 0 评论 -
epoll的一点思考(1)
最近在学习epoll用法,一直没太搞明白。网上提到 “ET(edge-triggered)是高速工作方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll告诉你。然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述符发送更多的就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了”。编写代码测试了一下:如果客户端发送1原创 2013-01-07 18:57:50 · 2235 阅读 · 0 评论 -
epoll的一点思考(2)
epoll out事件触发时机当epoll_ctl设置了out事件(add 或 mod),如果内核发送缓冲区有空闲,则会触发out事件,如果发送缓冲区满,则不会不会触发out事件,当发送缓冲区不再满时会触发out事件。如果在缓冲区由满变为不满之前不设置out事件(mod 修改out->in),在缓冲区不满之后不会触发out事件。第一种情况,设置out,测试代码如下:#include原创 2013-01-09 16:40:53 · 1063 阅读 · 0 评论 -
epoll一点思考(4)
epoll EPOLLONESHOTEPOLLONESHOT:只监听一次事件,当监听完这次事件之后,如果还需要继续监听这个socket的话,需要再次把这个socket加入到EPOLL队列里,这样IN事件会被保留。EPOLLONESHOT区别就是,每次IN事件都是串行进行,而不是多个in事件并行。ET模式与LT模式EPOLLONESHOT处理相同(1)设置EPOLLONESHOT,创原创 2013-01-09 18:59:50 · 2178 阅读 · 0 评论 -
epoll一点思考(3)
epoll in事件触发时机第一种情况,当设置了in,并且客户端发送数据到达会触发in事件第二种情况,设置in,但是客户端发送数据100字节,服务器读取20字节,不再触发in直到再次设置in或有新数据到达。第三种情况,设置in,如果client关闭(close socket或程序关闭),会触发in事件,recv返回0,如果没有del掉event,并且设置out事件,会触发out原创 2013-01-09 17:32:13 · 1461 阅读 · 0 评论 -
epoll的一点思考(5)
epoll 同时触发in与out通过测试发现out与in事件可以同时触发的,测试代码如下:#include #include #include #include #include #include #include #include #include #include using namespace std;#define MAXLINE 5#define OP原创 2013-01-10 08:47:44 · 988 阅读 · 0 评论 -
Linux 常见死机原因
在排除了硬件故障/firmware版本/BIOS等等问题之外, Linux死机通常可能碰到如下几种情况1, 如果你的Linux死机的时候控制台上有乱七八糟的字符。恭喜你,这种情况叫做oops. 通常是Linux kernel认为自己发生了异常造成的。可以通过oops消息查找出错的地方。 2, 如果你的机器僵死,那么问题麻烦了。这种时候,通常是Kernel出现了死锁。Kern转载 2013-04-02 10:19:38 · 8261 阅读 · 0 评论 -
Linux gdb调试多线程
linux gdb 调试多线程 单独调试线程http://coolshell.cn/articles/3643.html一、多线程调试多线程调试可能是问得最多的。其实,重要就是下面几个命令:info thread 查看当前进程的线程。 thread 切换调试的线程为指定ID的线程。 break file.c:100 thread all 在file.c文转载 2013-08-03 09:03:09 · 2685 阅读 · 0 评论 -
文件描述符被耗尽问题排查
下面是自己遇到问题时的解决过程:编写的服务器程序出现提示解析文件失败,使用xml解析库为tinyxml,通过定位发现时loadfile函数问题,开始怀疑是文件被占用,因为此问题是过一段时间产生的,所以分析可能是文件描述符问题。1.查看进程的文件描述符ps -ef|grep abc得到abc进程ID,然后进入/proc/进程id/fd 查看文件描述符,发现暂用超过系统上线。ulimi原创 2013-06-28 13:16:25 · 4433 阅读 · 0 评论 -
mysql_ping 阻塞问题
在日常开发过程中,为了解决Mysql has gone away问题使用了函数mysql_ping进行数据库的重连,不过在使用中发现mysql_ping有可能会永远阻塞,测试如下:首先建立好数据库连接,然后sleep(20),在20秒内添加iptables规则,如下:iptables -A INPUT -p tcp --dport 3306 -jDROP20秒后使用mysql_pi原创 2013-08-09 14:50:47 · 8603 阅读 · 2 评论 -
php调用C/C++问题
最近在项目中使用php的调用C/C++实现的代码,分为两类一类是调用C/C++接口,使用php扩展实现另一类是调用C/C++程序,本文着重讲解调用程序问题。我直接使用的时popen函数调用外部程序,外部使用C++编写,结果发现如果外部程序连接动态库则可能失败,read返回空。第一种方法是不使用动态库,直接在代码中实现;第二中方法如果我们必须使用第三方的库,则需要配置环境变量。解原创 2013-09-14 11:42:13 · 4757 阅读 · 0 评论 -
linux下使用TCP存活(keepalive)定时器
一、什么是keepalive定时器?[1]在一个空闲的(idle)TCP连接上,没有任何的数据流,许多TCP/IP的初学者都对此感到惊奇。也就是说,如果TCP连接两端没有任何一个进程在向对方发送数据,那么在这两个TCP模块之间没有任何的数据交换。你可能在其它的网络协议中发现有轮询(polling),但在TCP中它不存在。言外之意就是我们只要启动一个客户端进程,同服务器建立了TCP连接,不管你离转载 2013-01-09 10:00:00 · 2835 阅读 · 0 评论 -
linux下socket keep alive讲解
【需求】不影响服务器处理的前提下,检测客户端程序是否被强制终了。【现状】服务器端和客户端的Socket都设定了keepalive属性。服务器端设定了探测次数等参数,客户端、服务器只是打开了keepalive机能服务器端起了一个监视线程,利用select来检测socket是否被关闭。。。下面这是我的一点肤浅理解。1.关于keep alive无论window转载 2013-01-09 09:58:48 · 10939 阅读 · 2 评论 -
iptool模拟发包工具
有时候我们用wireshark或tcpdump抓取的数据包需要回放,我们现在使用的是iptool工具,可以打开pcap文件,然后模拟发送。我的测试环境:虚拟机配置网桥,iptool发送选择本地连接,注意需要是本地连接,无线连接我测试无效。原创 2012-11-21 09:14:09 · 8851 阅读 · 0 评论 -
关于Linux STL使用的一点总结
前两天发现Linux使用STL的程序内存占用比较大,通过valgrind检查没有发现内存泄露,分析可能与STL有关,所以单独对STL进行测试程序新建10个线程,采用分离方式,每隔2秒创建一个线程。1.对new 与 delete的测试在每个线程中new 很大一块内存,然后间隔20s后delete使用top查看DATA列与 VIRT列,发现内存一开始上涨到200多M,然后慢慢地随着de原创 2011-12-30 10:44:40 · 5216 阅读 · 0 评论 -
Linux 硬盘自读原因调查
以下是从网上查到:Linux机器硬盘自动变为只读(Read Only)的解决办法James Qi 2011年11月1日 - 10:24 发布 Linux机器的硬盘本来都是设置成读写(Read/Write)方式的,不过偶尔会发现自动变成了只读(Read Only),这半年来已经发生过好几次了,当时解决后忘记记录了,现在补记一下。转载 2012-04-20 16:13:31 · 1781 阅读 · 0 评论 -
2012 QQ协议 Analyzer分析结果
以下是复制的QQAnalyzer分析结果,中括号中为分析后结果,貌似有部分错误,大家有没有好的方法旁路阻断QQ,我测试另一台主机复制数据发送相同的数据包不可以。[NO.1 2012-05-31 08:47:20 091 SEND 87字节]02 2D 3D 00 91 00 15 48 1D 93 F9 02 00 00 00 0101 01 00 00 65 60 F2 16 D4原创 2012-05-31 10:26:44 · 46847 阅读 · 8 评论 -
libxml2解析xml文件记录
由于之前没怎么使用过xml,今天发现一个问题,直接使用子节点无法获取节点的属性,通过打印发现节点name为text,但是xml中不存在,通过上网查找由于xml对数据默认为text节点,虽然xml文档中看不到,但是在解析是存在,所以直接使用父节点的子节点可能会获取到text节点。解决方法是:在创建doc前调用xmlKeepBlanksDefault(0);,忽略空白字符,忽略了text节点,这样原创 2012-05-23 16:36:11 · 3569 阅读 · 0 评论 -
LDD3字符设备驱动pipe提示No such device or address
在学习LDD3的时候,学习到字符设备驱动scull使用scull驱动的设备有三类设备文件,分别是scull、scullp、sculla,使用scul.init start加载驱动,创建设备文件后,cat /proc/devices如下:203 cpu/cpuid249 scull249 scullp249 sculla250 hidraw设备文件如下:crw-r原创 2012-07-26 11:24:01 · 5921 阅读 · 0 评论 -
Linux调试技术
Linux程序错误主要有内存问题、程序异常。对于内存问题,如野指针、内存泄露,主要采用valgrind进行检查的,结合top等系统资源检查工具。对于程序其他异常,如输出结果不对等,这种问题一般使用gdb、strace、 输出进行调试对于内核调试总是感觉KGDB不好用,一般提示技术就是观察oops信息,结合printk,然后加逐步注释程序方式。参考:http://www.ibm.co原创 2012-08-16 10:51:37 · 764 阅读 · 0 评论 -
Linux修改网卡名称
实现步骤如下1,更改/etc/modprobe.conf文件中的模块alias比如 alias eth0 pcnet32修改为 alias lan pcnet32 2,更改网卡的配置文件的名字为ifcfg-lanmv /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcf转载 2012-09-07 13:23:14 · 8937 阅读 · 0 评论 -
通过串口连接linux配置过程
在虚拟机下测试1、 修改文件/etc/inittab编辑文件inittab,增加tty:2345:respawn:/sbin/agetty ttyS0 9600 vt100的内容:# vi /etc/inittab# Run gettys in standard runlevels1:2345:respawn:/sbin/mingetty tty12:2345:respaw原创 2012-10-19 10:03:56 · 4335 阅读 · 0 评论 -
libzdb数据库连接池
最近要做一个项目,数据库操作挺频繁,想着使用数据库连接池,在网上查到libzdb不错 http://www.tildeslash.com/libzdb/#api还没有用过,大家可以参考下。原创 2012-11-05 13:59:47 · 3258 阅读 · 0 评论 -
linux out of memory分析
Linux Out-of-Memory(OOM) Killer Linux有一个特性:OOM Killer,一个保护机制,用于避免在内存不足的时候不至于出现严重问题,把一些无关的进程优先杀掉,即在内存严重不足时,系统为了继续运转,内核会挑选一个进程,将其杀掉,以释放内存,缓解内存不足情况,不过这种保护是有限的,不能完全的保护进程的运行。 在很多情况下,经常会看到还有剩转载 2011-06-10 17:17:00 · 31794 阅读 · 0 评论