2013年4月4日

用gdb来学习c语言(linux环境下)

摘要: 本文转自:http://blog.csdn.net/physicsdandan/article/details/8076446gdb的使用介绍先创建一个如下的C程序,minimal.cint main(){ int i = 1337; return0;}这个程序不做任何事情并且没有一个printf语句。现在我们要鼓足勇气来通过gdb学习C语言了!编译这个程序时加上-g参数,这样gdb就可以调试信息了。然后执行下面命令。$ gcc -g minimal.c -o minimal$ gdb minimal你会发现你已经看到了gdb的prompt。我许诺过给你一个REPL,这里就是(gdb) pri 阅读全文

posted @ 2013-04-04 16:44 旭东的博客 阅读(867) 评论(0) 推荐(0)

2013年3月29日

Linux下C编程,进程通信之标准流管道通信(即系统调用)

摘要: 1.概述 在编程的过程中总会需要使用系统调用,如linux下的ps,touch,rm,grep命令等;windows下的dir,mkdir,del命令等。 在linux中执行系统调用,通常使用标准流管道。 标准流管道将一系列的创建过程合并到一个函数popen()中。poen完成的工作有以下几步: (1)创建一个管道。 (2)fork一个子进程。 (3)在父子进程中关闭不需要的文件描述符。 (4)执行exec函数族调用。 (5)执行函数中所指定的命令。2.主要函数说明 FILE*popen(const char*command,const char*type) (1)comm... 阅读全文

posted @ 2013-03-29 19:45 旭东的博客 阅读(2392) 评论(0) 推荐(1)

2013年3月28日

Linux下C编程,进程通信之无名管道通信

摘要: 最近在看进程间的通信,下面说说管道通信之无名管道。1.概述 管道是Linux中很重要的一种通信方式,他是把一个程序的输出直接连接到另一个程序的输入,并且管道具有队列的特性。如Linux命令,“ps -ef | grep root”。如下图所示:2.无名管道 2.1特点 (1)它只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间)。 (2)它是一个半双工的通信模式,具有固定的读端和写端。 (3)管道也可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。 2.2主要函数说... 阅读全文

posted @ 2013-03-28 22:11 旭东的博客 阅读(2708) 评论(0) 推荐(3)

2013年3月26日

Linux下C编程,子进程创建函数fork() 执行解析

摘要: 最近在看进程间的通信,看到了fork()函数,虽然以前用过,这次经过思考加深了理解。现总结如下:1.函数本身 (1)头文件 #include<unistd.h> #include<sys/types.h> (2)函数原型 pid_t fork( void); (pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中) 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1 (3)函数说明 一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child 阅读全文

posted @ 2013-03-26 11:40 旭东的博客 阅读(10593) 评论(0) 推荐(1)

2013年3月23日

linux下的find文件查找命令与grep文件内容查找命令

摘要: 在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。 (2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。 一.find命令 基本格式:find path expression 1.按照文件名查找 (1)find / -name httpd.conf #在根目录下查找文件httpd.conf,表示在整个硬盘查找 (2)find /etc... 阅读全文

posted @ 2013-03-23 14:03 旭东的博客 阅读(190320) 评论(0) 推荐(1)

2013年3月22日

Linux系统内存管理之伙伴系统分析

摘要: 今天去面试,一位面试官提到了内存管理的伙伴系统,当时就懵了,因为根本就没有听说过。晚上回来在实验室查了一些资料,现总结如下: 1.伙伴系统概念 伙伴系统是一种经典的内存管理方法。Linux伙伴系统的引入为内核提供了一种用于分配一组连续的页而建立的一种高效的分配策略,并有效的解决了外碎片问题。 2.伙伴系统的组织结构 Linux中的内存管理的“页”大小为4KB。把所有的空闲页分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页框的页块。最大可以申请1024个连续页,对应4MB大小的连续内存。每个页块的第一个页的物理地址是该块... 阅读全文

posted @ 2013-03-22 22:17 旭东的博客 阅读(7993) 评论(0) 推荐(2)

2013年3月20日

海量数据处理的 Top K算法(问题) 小顶堆实现

摘要: 问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数。(称作Top k或者Top 10) 问题分析:由于(1)输入的大量数据;(2)只要前K个,对整个输入数据的保存和排序是相当的不可取的。 可以利用数据结构的最小堆来处理该问题。 最小堆如图所示,对于每个非叶子节点的数值,一定不大于孩子节点的数值。这样可用含有K个节点的最小堆来保存K个目前的最大值(当然根节点是其中的最小数值)。 每次有数据输入的时候可以先与根节点比较。若不大于根节点,则舍弃;否则用新数值替换根节点数值。并进行最小堆的调整。 实现代码以及说明:#include<stdio... 阅读全文

posted @ 2013-03-20 15:24 旭东的博客 阅读(49859) 评论(4) 推荐(3)

Java数据导出(写)Excel文件 解析

摘要: 在编程中经常需要使用到表格(报表)的处理主要以Excel表格为主。下面给出用java写入数据到excel表格方法: 1.添加jar文件 java导入导出Excel文件要引入jxl.jar包,最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。下载地 址:http://www.andykhan.com/jexcelapi/ 2.jxl对Excel表格的认识 可以参见http://www.cnblogs.com/xudong-bupt/archive/2013/03/19/2969997.html 如下图是... 阅读全文

posted @ 2013-03-20 11:49 旭东的博客 阅读(10802) 评论(0) 推荐(2)

2013年3月19日

Java数据导入(读)Excel文件 解析

摘要: 在编程中经常需要使用到表格(报表)的处理主要以Excel表格为主。下面给出用java读取excel表格方法: 1.添加jar文件 java导入导出Excel文件要引入jxl.jar包,最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。下载地址:http://www.andykhan.com/jexcelapi/ 2.jxl对Excel表格的认识 (1)每个单元格的位置认为是由一个二维坐标(i,j)给定,其中i表示列,j表示行,并且从上到下递增,从左到右递增。 (2)对于合并单元格的以最左,最上的单元格的坐标... 阅读全文

posted @ 2013-03-19 21:48 旭东的博客 阅读(28728) 评论(8) 推荐(3)

斐波那契数列 矩阵求法 优化

摘要: 在做编程题目的时候经常会遇到“斐波那契数列”相关的题目,尤其在做OJ中。下面说一些方法: (一)递归 递归是最慢的会发生重复计算,时间复杂度成指数级。long long fac(int n){ if(n==1) return 1; else if(n==2) return 2; else return fac(n-1)+fac(n-2);} (二)循环 利用临时变量来保存中间的计算过程,加快运算。long long fac(int n){ long long a=1,b=2,c; if(n==1) return 1; else if(n=... 阅读全文

posted @ 2013-03-19 10:39 旭东的博客 阅读(21228) 评论(2) 推荐(4)

导航