
C程序
文章平均质量分 50
Joseph_1118
这个作者很懒,什么都没留下…
展开
-
C基础----函数参数传递之值传递
最近逛优快云多了,看到论坛中很多新手提的问题,不禁想写个博客和大家分享一下。同时对自己也是一个复习。 我们还是直接通过代码来讲: 1 #include 2 3 int foo(int a, int b) 4 { 5 a = 1; 6 b = 2; 7 8 return a + b; 9 } 10 11 1原创 2012-10-14 19:10:09 · 1319 阅读 · 1 评论 -
C语言封装disruptor
disruptor是一个java的并发编程框架,不了解的可参考:http://www.oschina.net/p/disruptor在理解了disruptor的原理之后,然后参考一个开源的disruptor for c(https://github.com/colding/disruptorC)后写了一个disruptor库,通过该库可以更容易地使用这个框架。头文件disruptor.h:#if原创 2015-09-22 13:31:24 · 2653 阅读 · 1 评论 -
NPTL分析之线程的创建
NPTL线程的创建原创 2015-08-04 14:15:01 · 3939 阅读 · 3 评论 -
一个让人崩溃的编码错误
最近写了一个接受socket数据包,然后再重组上层协议包的东西。每次read到数据就将数据添加到一个链表的尾部,然后检查是否收到了一个完整的包。为了减少内存碎片,把用过的链表节点添加到另外一个链表中,这样下次可以从这个cache链表中重用节点。 在debug的时候我把cache list中的数据打印出来,代码如下:struct seg_node{ void* bu原创 2014-05-25 17:33:18 · 1274 阅读 · 0 评论 -
linux多线程环境下的抢尸行为(system返回-1:No child processes)
故事背景: 我们这边开发了一个动态库给客户用,动态库里面会调用system来做insmod/rmmod模块的事情。这些模块都是我们这边提供给客户的。拿到客户那边去测试,会随机性的出现system返回-1的问题,也就是system出错了!但是奇怪的是我们发现实际上insmod/rmmod是成功了的。把当时的errno和对应的出错信息打出来发现errno是10,对应的信息是No child p原创 2014-01-01 21:27:53 · 5437 阅读 · 1 评论 -
TCP/IP:frame的接收方式之中断方式
在学习TCP/IP时,不可避免地要理解接收frame的中断方式和轮询方式,以及两者的结合。为什么不坚持中断方式?因为在负载高时效率低,为什么低?因为中断频繁...等等。其实,如果我们理解了中断的过程,那么就很好理解了。 首先,我们来看看中断方式相对于轮询方式的优点。 由于我们不知道数据包什么时候会来,因此,为了能否在数据包来后及时的处理,所以要不停的去读状态看看数据来了没。显然,如原创 2013-12-07 22:16:20 · 2299 阅读 · 0 评论 -
不错的在线图书馆
http://syszux.com/book/里面很多IT方面的经典书籍。转载 2013-10-27 14:47:19 · 1552 阅读 · 0 评论 -
【广度优先遍历】营救公主
题目描述:公主被魔王抓走了,王子需要拯救出美丽的公主。他进入了魔王的城堡,魔王的城堡是一座很大的迷宫。为了使问题简单化,我们假设这个迷宫是一个N*M的二维方格。迷宫里有一些墙,王子不能通过。王子只能移动到相邻(上下左右四个方向)的方格内,并且一秒只能移动一步,就是说,如果王子在(x,y)一步只能移动到(x-1,y),(x+1,y),(x,y-1),(x,y+1)其中的一个位置上。地图由‘S’,原创 2013-07-20 20:48:30 · 6776 阅读 · 0 评论 -
linux信号处理流程前篇---内核态与用户态的切换
由于linux中信号的处理时机在内核态返回用户态时,所以本文首先讲一下用户态与内核态的切换。 首先,我们来看用户态到内核态的切换。用户态切换到内核态有两种途径,第一种是中断,这个是被动的。第二种是系统调用,这个是主动的。 1、中断 对于一个正在运行的task来说,其运行在用户态时,内核栈是空的。中断到来时,会将当时的寄存器(用户态寄存器)信息按照pt_regs的结构压入到内原创 2013-07-03 23:13:54 · 2606 阅读 · 0 评论 -
计算蜂窝中两个点之间的距离
如下图所示,求两个id之间的距离,如1到18的距离为2.方案是用极坐标法,然后确定每个ID的坐标,再根据坐标来计算距离。代码如下:#ifndef HONEYCOMB_H#define HONEYCOMB_Hextern void init_honeycomb(int max_id);extern int calc_distance(int id1, int i原创 2013-07-19 01:11:24 · 2214 阅读 · 0 评论 -
什么叫做程序(或者说进程)在运行?
初看这标题,简直就是个渣写的,程序运行嘛,就是一个程序在运行嘛.......比如说这个暴风影音正在放片儿,这个QQ正在发送消息等等,这些都是看得见的,那么看不见的呢? 不管咋滴,我觉得还是弄得清楚些好点,弄懂了基本上不会忘记,记住的东西往往会忘记。说一个程序在运行是什么意思,这个问题其实回归到现代计算机的模型这个问题上。就是冯诺依曼模型吧。Let's have a look:原创 2012-10-30 20:44:16 · 1757 阅读 · 0 评论 -
C基础----返回局部变量的地址&栈(linux)
近来是校园招聘高峰期啊... ... 局部变量之局部指的是一个变量的作用范围,例如一个函数内定义的变量。这里我们要说的就是这种变量。 很多书上或者说面试宝典呐之类的,都说不要返回一个局部变量的地址以供外部使用。怎么说呢,这种说法应该是基于编码习惯软件工程角度来说的,这种做法确实很容易出问题,但不是一定会出问题。下面我们来看一个简单的C代码: 1 #include 2原创 2012-10-15 23:01:41 · 5841 阅读 · 0 评论 -
printf出现Segmentation fault
printf出现seg fault的场景很多,大多数是参数错误导致的。 例如下面这个:int a = 1;printf("%s\n", a);或者: printf("%s\n"); // 没有参数哦但是,我遇到了一个更加隐蔽的… 出现的场景是这样的: 我们的程序里面有一个这样的全局变量: int s_code_ar[5]; 我们的程序员读取一个配置文件,然后把提取出来的code存入这个原创 2015-11-13 16:09:21 · 4877 阅读 · 0 评论