摘要: 今天看书,重新写了一个快排,留着给自己以后看。#include<stdio.h>#include<stdlib.h>#include<string.h>int partion(int a[],int bg, int ed){ int t; int i,j; t = a[bg]; //标志 i = bg; j = ed; while( i < j){ while(i < j && a[j] > t) j--; if(i < j){ a[i] = a[j]; ... 阅读全文
posted @ 2012-06-10 22:47 北海石松 阅读(498) 评论(0) 推荐(0)
摘要: 分析linux网络的书已经很多了,包括《追踪Linux TCP/IP代码运行》《Linux内核源码剖析——TCP/IP实现》,这里我只是从数据包在linux内核中的基本流程来分析,尽可能的展现一个主流程框架。内核如何从网卡接收数据,传统的过程:1.数据到达网卡;2.网卡产生一个中断给内核;3.内核使用I/O指令,从网卡I/O区域中去读取数据;我们在许多网卡驱动中(很老那些),都可以在网卡的中断函数中见到这一过程。但是,这一种方法,有一种重要的问题,就是大流量的数据来到,网卡会产生大量的中断,内核在中断上下文 中,会浪费大量的资源来处理中断本身。所以,就有一个问题,“可不可以不使用中断”,这就是 阅读全文
posted @ 2012-06-10 16:20 北海石松 阅读(15383) 评论(1) 推荐(0)
摘要: OCI编程的一般过程:View Code typedef struct _OCI_HANDLE { OCIEnv *phEnv; //环境句柄,要使用oracle数据库,必须首先获得环境句柄 OCISvcCtx *phService; //oracle的服务句柄,也可以说是连接句柄。 OCIError *phErr; //oracle的错误句柄,可以获取错误信息 OCIStmt *phStmt; //oracle的语句描述句柄 OCIServer *phServer; //Oracle的... 阅读全文
posted @ 2012-02-24 21:48 北海石松 阅读(709) 评论(0) 推荐(0)
摘要: 今天偶然看到一个找出N个数中最大的前500个数,一个不错的解法是使用堆来进行选择,每一次读取一个数判断是否需要放到堆中,这样比较下来就可以找到最大或最小的前500个数了,自己晚上就参考别人的代码写了一个最小堆的结构,后期继续补充。View Code #include <stdio.h>#include <stdlib.h>typedef int ElemType;struct heap{ ElemType *num; int heapsize; int maxSize;};struct heap HP;int init_heap(int size){ if(size . 阅读全文
posted @ 2012-02-16 00:03 北海石松 阅读(268) 评论(0) 推荐(0)
摘要: 一、crontab文件内容格式:{分 时 日 月 星期 命令},如果是离散的点,可以用逗号分开,比如第一列为0,15,30,45时表示0分,15分,30分,45分,而连续的点则用“-”连接,比如第一列为30-45表示30分到45分钟。命令格式{crontab [-u user] -e -l -r},e表示编辑,l表示列表,r表示删除。一般开始的时候要在$HOME目录下面添加.profile文件,里面填写“EDITOR=vim;export EDITOR”;然后就可以创建一个CRON文件了,填写需要执行的命令。如果不小心删除了CRON文件,可以通过“crontab FILENAME”来恢复。二、 阅读全文
posted @ 2012-01-14 15:30 北海石松 阅读(197) 评论(0) 推荐(0)