
C编程
庞叶蒙
没有最牛逼的技术,只有最适合的技术。
展开
-
C编程之core dump杂谈
C编程之core dump杂谈原创 2015-06-05 16:39:14 · 975 阅读 · 0 评论 -
linux 编程 信号处理
0x01 缘由 最近面试遇到SIGPIP信号的处理的场景,但是这个信号的处理一般常见socket编程,我们在编写基础框架时一般都会对此信号进行捕获。 现在系统学习相关信号,以及常出现的场景。0x02 信号介绍 0x03 SIGPIPE介绍 这个信号的触发常出现在这样socket编程场景:连接建立,若某一端关闭连接,而另一端仍然向它写数据,第一次写数据原创 2017-12-20 15:46:08 · 417 阅读 · 0 评论 -
main函数的返回值
0x01 缘由 最近在面试过程中,面试官都会问些C语言容易忽视的地方,如main函数返回值的作用等。这些细节还是得学习下,虽然在实践工作中的使用会较少。0x02 介绍 程序运行过程入口点main函数,main()函数返回值类型必须是int,这样返回值才能传递给程序激活者(如操作系统)表示程序正常退出。main(int args, char **argv) 参数的传递。参数的原创 2017-12-20 15:24:15 · 8106 阅读 · 0 评论 -
linux 下应用编程进程内存资源的限制
0x01 缘由 当将生产环境换为64bit后,系统内存的问题全部显现,内存耗尽、内存占用大,导致内存耗尽,吃掉交换分区内存,然后系统卡、卡、卡... ...0x02 知识点 内存相关知识点参考http://blog.youkuaiyun.com/pangyemeng/article/details/74806620 linux c 编程资源限制: API: 能够通过函数get原创 2017-07-24 13:53:56 · 5231 阅读 · 0 评论 -
write调用-linux系统编程
0x01 缘由 当write()调用返回时,内核已经把数据从提供的缓冲区拷贝到内核缓冲区中,但不保证数据已经写到目的地。实际上,write调用执行非常快,因此不可能保证数据已经写到目的地。处理器和硬盘之间的性能差异使得这种情况非常明显。如下图所示: write调用和内核缓冲区数据写入硬盘完全是两个独立的操作。write没有等待内核缓冲区数据写入硬盘完成后才返原创 2017-07-18 08:56:43 · 854 阅读 · 0 评论 -
一次外场宕机引发对linux内存管理的进一步思考--Linux虚拟地址空间如何分布
这边文章主要从一次宕机事故引申对linux内存布局的思考、对内存分配的思考、对linux保护机制的思考、对swap交换去的思考。原创 2017-07-08 15:04:58 · 1711 阅读 · 0 评论 -
linux文件IO
0X01缘由 最近产品生产环境了解到,磁盘I/O频率较高,不仅仅ElasticSearch这样分布式服务系统占用较高,而且后台处理程序写小文件频率较高。用iotop查看时,表象上看到瞬时占用到99.99%,于是学习一把。0x02转发原文 转载于:http://blog.chinaunix.net/uid-27105712-id-3270102.html?转载 2017-07-16 11:38:34 · 306 阅读 · 0 评论 -
Linux c/c++后端编程,信号量,屏蔽和不屏蔽,信号捕获;
0x01 缘起在 linux c/c++后端编程的过程中,我们经常对捕获和捕获一些信号的处理。主要是在程序收到相关信号时能进行安全的退出,做一些善后处理。如下场景:Linux下的线程实质上是轻量级进程(light weighted process),线程生成时会生成对应的进程控制结构,只是该结构与父线程的进程控制结构共享了同一个进程内存空间。 同时新线程的进程控制结构将从父线程(进原创 2017-06-20 18:05:47 · 2058 阅读 · 1 评论 -
Linux 开发过程中I/O操作的效率测试
缘由:在linux c/c++应用开发中,难免会产生大量的I/O,然而在对程序性能要求较高时,避免I/O过高或效率过低,导致整体性能拖慢。因此,在程序架构设计上要非常关注I/O带来的性能瓶颈,下面做一些简单的测试耗时,作为相关设计的参考。目的:1.性能分析的目的 1)找出系统性能瓶颈(包括硬件瓶颈和软件瓶颈); 2)提供性能优化的方案(升级硬件?改进系统系统结构?); 3)达到合理的硬件和软原创 2017-05-22 16:54:39 · 1037 阅读 · 0 评论 -
coredump 续---abort,addr2line
0x01缘由 在项目实际开发中,当出现段错误时,为了定位问题的代码行。必须保留程序运行上下文、根据linux内核日志定位代码行等。 有时当程序自己发现问题时,自动退出程序释放资源,如发现系统内存耗尽时,退出程序,又得自动将文件流刷新到磁盘等。0x02 abort介绍 信号量:SIGABRT 6 程序自己发现错误并调用 abort 时产生。原创 2017-06-06 16:59:15 · 2375 阅读 · 0 评论 -
32bit与64bit程序移植
缘由 最近在移植32bit代码过程中,发现各种异常bug,排查和定位非常困难。很多都是编程习惯导致的。 132位与64位 (1)64bit CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存 (2)64位CPU一次可提取64位数据,比32位提高了一倍,理论上性能会提升1倍。但这是建立在64bit操作系统,64bit软件的基础上的。 2数据类型长度原创 2017-04-01 15:00:11 · 1247 阅读 · 0 评论 -
单台服务器上的并发TCP连接数可以有多少
曾几何时我们还在寻求网络编程中C10K问题的解决方案,但是现在从硬件和操作系统支持来看单台服务器支持上万并发连接已经没有多少挑战性了。我们先假设单台服务器最多只能支持万级并发连接,其实对绝大多数应用来说已经远远足够了,但是对于一些拥有很大用户基数的互联网公司,往往面临的并发连接数是百万,千万,甚至腾讯的上亿(注:QQ默认用的UDP协议)。虽然现在的集群,分布式技术可以为我们将并发负载分担在多台服务转载 2017-02-24 13:50:21 · 425 阅读 · 0 评论 -
undefined reference问题排查
undefined reference原创 2015-12-25 15:17:13 · 1843 阅读 · 0 评论 -
网络设备开军火发库(libnet,libpcap,pfring,dpdk)
1缘起实际工作中开发网络设备时,常用到的一些开源网络库,做一些底层的包的捕获、发送、修改等。下面简单介绍一下有哪些开源工具,以及相应的简单用法。有一些特殊的数据包要做特殊处理,如vlan环境下的数据包。2 libnet(发包)2.1简介libnet是一个小型的接口函数库,主要用C语言写成,提供了低层网络数据包的构造、处理和发送功能。libnet的开发目的是:建立一个简单统一的网原创 2015-08-14 16:09:45 · 5961 阅读 · 0 评论 -
代码静态检查-cppcheck
1安装解压:tar xzvf cppcheck-1.69.tar.gz进入源码,方法1:make & sudo make install如果方法1运行报错(找不到配置文件),则按方法2:make SRCDIR=build CFGDIR=/usr/share/cppcheck/make install CFGDIR=/usr/share/cppcheck/2功能Cpp原创 2015-08-10 17:22:12 · 1669 阅读 · 0 评论 -
Linux C编程中遇到问题
1、memcpy 和 memmove 功能:拷贝一定长度内存内容到指定的内存; 区别:当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确; 函数原型: void *memcpy(void *dst, const void *src, size_t count); void *memmove(void原创 2015-07-10 15:01:35 · 615 阅读 · 0 评论 -
谈谈linux c编程过程
cppcheck、splint、valgrind、gperftools原创 2015-07-01 17:32:36 · 583 阅读 · 0 评论 -
epoll两种模式(lt/et)复习
0x01 缘由 最近又在复习一些基础知识,现在看看epoll的相关知识点。0x02 介绍 epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只原创 2018-01-08 16:41:44 · 922 阅读 · 0 评论