哈喽,我是老吴,赓续纪录我的研习心得。
一、超过的滞后性咱们憧憬超过是线性:每一私人付出一些勉力后,都指望它有空谷传声的成就。
事实是:做出勉力后,成绩的显现通常滞后。
惟有在几个月或几年后,咱们才意识到昔时研习/处事的真实代价。
“绝望谷地”的涌现:人们在投入数周或数月的勤恳处事后,却没有任何看得见的成就,因而加入深感懊丧的时代。
何如变动:1变动意识。岁月并没有徒劳,它可是积蓄起来了。直到许久之后,昔时勉力的一块代价才会显现出来。
2找寻一些也许辅助自身对立滞后超过所带来的失落心思的本领。譬喻教育习惯的四大定律,详细的如立即嘉奖、习惯追踪等。
二、triggerhappy源码懂得/3.select()的运用正文目录:
1.thd.c/process_events()源码懂得2.I/O多路复用(Multiplexing)是为知道决甚么题目3.I/O多路复用打算思绪4.select()的用法5.和poll/epoll对照(增加学问,非中心)6.triggerhappy:thd.c/process_devices()源码懂得7.干系参考
写稿宗旨:
经过浏览triggerhappy的源码,研习I/O多路复用的办法之一select()的应用办法。测试处境:
Ubuntu16.04Gcc5.4.01.thd.c/process_events()源码懂得1.1process_events()的效用1)效用:
监控input摆设;读取input事项,并实行响应的action;查看socket能否有接遭到夂箢。2)移用过程:
thd.cmain()start_readers()process_events()1.2process_events()的体例:4个环节
1)创建主轮回:
while(count_devices()0
cmd_fd!=-1){[...]}
2)在主轮回内,应用select监测多个input摆设文献(中心):
while(...){[...]//someinitforselectretval=select(max_fd+1,rfds,NULL,NULL,tv);}
本文的中心便是知道 select干系的学问点。
3)select返回后,移用process_devices()读取数据(中心):
while(...){[...]//someinitforselectretval=select(max_fd+1,rfds,NULL,NULL,tv);if(retval){process_devices();}}
process_devices()是triggerhappy的中心函数。
先大抵知道一下它的效用:关于每一个有待读数据的input摆设文献,都移用read()函数读取数据,而后懂得数据,依据懂得成绩去实行响应的action,action在example.conf中界说:
$cat/etc/triggerhappy/triggers.d/example.confKEY_VOLUMEUP1/usr/bin/amixersetMaster5%+...
/usr/bin/amixersetMaster5%+便是一个action。
临时不必太深入,后续会特地写一篇文章来详细懂得process_devices()。
4)能否有采纳到用户夂箢(th-cmd)?
while(...){[...]if(retval){process_devices();if(cmd_fd!=-1FD_ISSET(cmd_fd,rfds)){struct