
Linux Programming
关于Linux 编程的一些知识
阿卡基-马
业余马拉松选手
展开
-
SIGPIPE导致的程序退出
摘要:当服务器或客户端非正常退出的时候,另一方继续send时直接造成程序退出。gdb调试结果send已经的关闭的套接字时,收到SIGPIPE信号,系统对该信号的默认处理方式是程序直接退出。若不想直接退出可以对SIGPIPE信号设置自己的处理方式或忽略。如程序中添加:SIG_DFL系统忽略捕获的信号SIG_IGN系统对捕获的信号采用默认操作此时程序不会直接退出,send返回0perror(...原创 2019-01-24 09:14:27 · 527 阅读 · 1 评论 -
设置了ulimit -c ulimited但是还是没有保存core文件
1.用 ulimit -a 查看 core file size 项是否为 unlimited。如果不是,修改成unlimitedulimit -c unlimited12.检查core产生路径是否正确,cat /proc/sys/kernel/core_pattern1根据显示的路径去寻找core文件,如果路径不存在或者想更改core文件保存的路径,则执行echo "./core-%e-%p-%s" > /proc/sys/kernel/core_pattern1表示core.转载 2021-12-15 17:38:07 · 2166 阅读 · 0 评论 -
[#] 在Linux中如何利用backtrace信息解决问题
在Linux中如何利用backtrace信息解决问题一、导读在程序调试过程中如果遇到程序崩溃死机的情况下我们通常多是通过出问题时的栈信息来找到出错的地方,这一点我们在调试一些高级编程语言程序的时候会深有体会,它们通常在出问题时会主动把出问题时的调用栈信息打印出来,比如我们在eclipse中调试java程序时。当这些换到Linux上的C/C++环境时情况将变的稍微复杂一些,通常在这种情况下是通过拿到出问题时产生的core文件然后再利用gdb调试来看到出错时的程序栈信息,这是再好不过的了,但当某些特殊的转载 2021-12-14 09:04:31 · 971 阅读 · 0 评论 -
EasyLogger使用教程
int main(void) { /* close printf buffer */ setbuf(stdout, NULL); /* initialize EasyLogger */ elog_init(); /* set EasyLogger log format */ elog_set_fmt(ELOG_LVL_ASSERT, ELOG_FMT_ALL); elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL...原创 2021-10-15 09:53:55 · 3193 阅读 · 0 评论 -
文件IO(系统IO和标准IO)
Linux系统下操作文件有两类基本API,一类由系统调用提供,被称为系统IO。一类由标准C库提供,被称为标准IO。拓展:它们都是Linux下操作文件的标准接口,那又有什么区别?我们该如何选择使用呢?第一:系统IO是更底层的接口,因此任何设备和文件最终都是可以通过系统IO来操作。系统IO不提供缓冲区,意味着每次读写都必须进入内核,对于大数据量的读写操作会影响效率。第二:标准IO是由标准库提供的接口...原创 2018-06-21 09:20:19 · 1093 阅读 · 0 评论 -
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
1、去空格及特殊符号s.strip()s.lstrip()s.rstrip()s.strip().lstrip().rstrip(',') 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头、结尾处,位于rm删除序列的字符 s.lstrip(rm) 删除s字符串中开头处,位于rm删除序列的字符 s.rstrip(rm)...原创 2018-04-14 10:41:38 · 253 阅读 · 0 评论 -
Brendan Gregg: 一个实战派大神
第一次知道Brendan Gregg,是我还在Juniper的时候。插点花絮,关于Juniper,你可以百度下“程序员薪水最高的25家公司”,那就是因为这条新闻才打定了主意去的Juniper, 只能说,Juniper的HR们很优秀。 言归正传,我那会在Juniper主要是研究网络性能优化的一些东西,Juniper的系统是BSD,所以我就研究上了Dtrace,而Dtrace Toolkit以及Dtrace书的的作者就是Brendan Gregg。 不过我并没有因此而跟Brendan Gregg正面刚,我刚的是转载 2021-06-08 09:29:41 · 1969 阅读 · 2 评论 -
例说生产者和消费者模型 【转】
什么是生产者和消费者模型什么是生产者消费者模型?生产者和消费是操作系统中一种重要的模型,它描述的是一种等待和通知的机制,如下图。生产者和消费者模型必须具有的条件用一句话概括,生产者消费者模型必须具有的条件是三种关系,两类角色,一类交易场所。一类交易场所:交易场所指的是生产者和消费者之间进行数据交换的仓库,这块仓库相当于一个缓冲区,生产者负责把数据放入到缓冲区中,消费者负责把缓冲区中的数据取出来...原创 2018-06-08 16:25:02 · 404 阅读 · 0 评论 -
Libevent之evconnlistener详解
evconnlistener的简介基于event和event_base已经可以写一个CS模型了。但是对于服务器端来说,仍然需要用户自行调用socket、bind、listen、accept等步骤。这个过程有点繁琐,并且一些细节可能考虑不全,为此Libevent推出了一些对应的封装函数,简化了整个监听的流程,用户仅仅需要在对应回调函数里面处理已完成连接的套接字即可。1、省去了用户手动注册事件的过程。2、省去了用户去验证系统函数返回是否成功的问题。3、帮助用户完成了处理非阻塞套接字accpet的麻烦。原创 2020-12-28 20:03:23 · 2398 阅读 · 0 评论 -
epoll机制:epoll_create、epoll_ctl、epoll_wait、close
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,linux/posix_types.h头文件有这样的声明:#define__FD_SETSIZE1024表示select最多同时监听1024个fd,当然,可以通过修改头文件...原创 2020-09-02 10:55:39 · 1387 阅读 · 0 评论 -
linux的定时器(timer_create,timer_gettime,timer_delete,SIGEV_SIGNAL)
系统中的一个模块需要频繁的获取系统时间,使用linux中内置的函数开销过大,因为需要的精度不是很高(毫秒级),索性用signal函数配合setitimer实现了个简易的全局时钟。但是后来发现,SIGALRM的中断信号回终止sleep,因为sleep就是用SIGALRM信号量实现的,得另想方案。这个替代方案就是POSIX中内置的定时器:timer_create()(创建)、timer_settime()(初始化)以及 timer_delete(销毁),将自己的时间信号处理函数用timer_create转载 2020-07-16 16:12:17 · 3377 阅读 · 0 评论 -
linux下多定时器+线程池的实现(经典)
linux只允许单进程拥有一个定时器,因此在linux下的单进程中要使用多个定时器,则需要自己维护管理这个实现允许用户使用多个自定义的定时器,每个自定义的定时器将周期地被触发直到其被删除。实现的主要思路是:i)首先在初始化多定时器(init_mul_timer)时利用setitimer注册一个基本的时间单位(如1s)的定时事件;ii)用户需要set_a_timer注册自定义定时器时,在timer_manage管理结构中记录这个定时器的回调函数和定时周期等参数;iii)当基本的时间单位到期后.原创 2020-07-16 15:04:15 · 840 阅读 · 0 评论