上一页 1 ··· 58 59 60 61 62 63 64 65 66 ··· 71 下一页
摘要: 进行有效编辑的七种习惯 Bram Moolenaar 如果你的很多时间是用来敲纯文本,写程序或HTML,那么有效地使用一个好的编辑器能节省你不少时间。这篇文章里的指导和提示将有助于你更快工作,更少犯错误。 文中采用开源文本编辑器Vim(Vi IMproved)说明有效编辑的思想,但这些思想也适用于其他编辑器。择合适的编辑器只是有效编辑的第一步,对于哪个编辑器更好的讨论将占很大地方,这里就不提了。如果你不知道该用哪个编辑器,或者对现在所使用的不太满意,不妨试试Vim;你是不会失望的。 第一部分:编辑一个文件 快速定位 编辑中大部分时间是花费在阅读、查错和寻找应该进行编辑的地方上,而不是插入新文字 阅读全文
posted @ 2011-04-23 23:35 hnrainll 阅读(1663) 评论(0) 推荐(0) 编辑
摘要: 转自:http://www.cnblogs.com/super119/archive/2011/03/26/1996145.htmlfunc是一个函数指针,该函数返回值是int,没有输入参数;然后主程序中声明了一个函数指针myFuncPointer,该函数指针代表的函 数输入参数是一个int,返回值也是一个函数指针,类型就是func类型的。所以我们可以把func2这个函数赋给myFuncPointer这个指针。 interview的题目要的就是myFuncPointer这个指针的声明。 //add by wenhao //20110422 添加注释#include <stdio.h> 阅读全文
posted @ 2011-04-22 20:01 hnrainll 阅读(2613) 评论(0) 推荐(0) 编辑
摘要: /* ************************************************************************ * Filename: m_mutex.c * Description: * Version: 1.0 * Created: 2011年04月22日 阅读全文
posted @ 2011-04-22 19:34 hnrainll 阅读(26326) 评论(0) 推荐(1) 编辑
摘要: 最近使用sqlite较多,这东西现在是越用越着迷,不管是工作或者个人自娱自乐写东西,只要有数据存储首先就想到了sqlite,我一直对C/S模式的数据存储很反感,记得在知道sqlite之前的很长一段时间里一直用的是xml来存数我的数据,我喜欢将数据存储在单一文件里,我可以随时把数据带在身上,而且它们兼 阅读全文
posted @ 2011-04-22 10:44 hnrainll 阅读(15510) 评论(0) 推荐(0) 编辑
摘要: 驱动程序和用户程序可不一样,它是作为一个模块连接到内核模块来运行的,运行在内核空间里面。所以要运行我们自己构造的模块,需要自己的系统已经配置好内核树,然后把目标模块和内核树连接起来运行!可以查看一下自己的电脑有没有配置内核树,可以到 /lib/modules/2.6.35-22-generic目录下面,看看有没有build这个文件夹,如果有,说明你已经有内核树了,如果没有,就自己构建内核树吧。内核树构建过程安装编译内核所需要的软件(也可不装,除非你要用 make menuconfig,用make oldconfig不要)sudo apt-get install build-essential 阅读全文
posted @ 2011-04-22 08:35 hnrainll 阅读(2377) 评论(0) 推荐(0) 编辑
摘要: 本文是参考了网上多篇帖子而写的算不上什么原创。唯一值得欣慰的只不过在本机上实现罢了。因为毕竟失败了几次。也因为本人是初学驱动编程 很多简单的问题在我来说是相当的困难的。望有识之士不要笑话。最后,希望本文能给刚学驱动而还没开头的人提供一些帮助。 刚看 O'REILLY 写的《LINUX 设备驱动程序》 阅读全文
posted @ 2011-04-21 21:42 hnrainll 阅读(849) 评论(1) 推荐(0) 编辑
摘要: Linux系统调用实验【实验目的】理解系统调用的概念,熟悉系统调用的用法。【实验设备】装有Linux操作系统的PC机一台。【实验要求】编程创建系统调用mycall(),实现功能是显示字符串到屏幕上。编译2.4.18内核,用新内核引导系统。编程调用自己创建的系统调用。【实验原理】操作系统是用户与计算机之间的接口,用户通过操作系统的帮助,可以快速、有效和安全可靠地使用计算机系统中的各种资源来解决自己的问题。为了使用户方便的使用操作系统,OS向用户提供了“用户与操作系统的接口”。这种接口支持用户与操作系统之间进行交互,这些接口可以被分为命令和程序接口两种。前者直接提供给用户在键盘终端上使用;后者则是 阅读全文
posted @ 2011-04-21 20:29 hnrainll 阅读(2377) 评论(0) 推荐(0) 编辑
摘要: //信号量---线程间通信//“生产者消费者” 问题#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<semaphore.h>#include<pthread.h>#define msleep(x) usleep(x*1000)#define PRODUCT_SPEED 3 //生产速度#define CONSUM_SPEED 1 //消费速度#define INIT_NUM 3 //仓库原有产品数#define TOTAL_NUM 10 //仓库容量sem_t 阅读全文
posted @ 2011-04-21 19:43 hnrainll 阅读(6971) 评论(1) 推荐(0) 编辑
摘要: SYNOPSIS #include <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value);//初始化信号量 int sem_wait(sem_t * sem);//等待信号,获取拥有权 int sem_trywait(sem_t * sem); int sem_post(sem_t * sem);//发出信号即释放拥有权 int sem_getvalue(sem_t * sem, int * sval); int sem_destroy(sem_t * sem);//注销信号量,在linux中 阅读全文
posted @ 2011-04-20 16:55 hnrainll 阅读(30607) 评论(0) 推荐(3) 编辑
摘要: ioctl函数本函数影响由fd参数引用的一个打开的文件。#include<unistd.h>int ioctl( int fd, int request, .../* void *arg */ );返回0:成功 -1:出错第三个参数总是一个指针,但指针的类型依赖于request参数。我们可以把和网络相关的请求划分为6类:套接口操作文件操作接口操作ARP高速缓存操作路由表操作流系统下表列出了网络相关ioctl请求的request参数以及arg地址必须指向的数据类型:类别Request说明数据类型套接口SIOCATMARKSIOCSPGRPSIOCGPGRP是否位于带外标记设置套接口的 阅读全文
posted @ 2011-04-20 16:21 hnrainll 阅读(689) 评论(0) 推荐(0) 编辑
摘要: 1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:void a; 这行语句编译时会出错,提示“illegal use of type 'void'”。不过,即使void a的编译不会出错,它也没有任何实际意义。 voi 阅读全文
posted @ 2011-04-20 13:24 hnrainll 阅读(410) 评论(0) 推荐(0) 编辑
摘要: #include<stdlib.h>#include<stdio.h>#include<unistd.h>#include<pthread.h>void clean_fun1(void * arg){ printf("this is clean fun1\n");}void clean_fun2(void * arg){ printf("this is clean fun2\n");}void * thread_fun(void * arg){ pthread_cleanup_push(clean_fun1 阅读全文
posted @ 2011-04-20 12:31 hnrainll 阅读(4471) 评论(0) 推荐(0) 编辑
摘要: 概述 在很多情况下,尤其是读别人所写代码的时候,对 C语言声明的理解能力变得非常重要,而C语言本身的凝练简约也使得C语言的声明常常会令人感到非常困惑,因此,在这里我用一篇的内容来集中阐述一下这个问题。 问题:声明与函数 有一段程序存储在起始地址为 0的一段内存上,如果我们想要调用这段程序,请问该如何去做? 答案 答案是 (*(void (*)( ) )0)( )。看起来确实令人头大,那好,让我们知难而上,从两个不同的途径来详细分析这个问题。 答案分析:从尾到头 首先,最基本的函数声明: void function (paramList); 最基本的函数调用: function(paramLis 阅读全文
posted @ 2011-04-20 10:12 hnrainll 阅读(486) 评论(0) 推荐(0) 编辑
摘要: 1. 引言在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。包括根文件系统和建立于 Flash 内存设备之上文件系统。通常用 ram disk 来作为 root fs。 4. 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI 有:M 阅读全文
posted @ 2011-04-19 18:56 hnrainll 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 原地址:http://www.ibm.com/developerworks/cn/linux/l-linuxboot/index.html早期时,启动一台计算机意味着要给计算机喂一条包含引导程序的纸带,或者手工使用前端面板地址/数据/控制开关来加载引导程序。尽管目前的计算机已经装备了很多工具来简化引导过程,但是这一切并没有对整个过程进行必要的简化。让我们先从高级的视角来查看 Linux 引导过程,这样就可以看到整个过程的全貌了。然后将回顾一下在各个步骤到底发生了什么。在整个过程中,参考一下内核源代码可以帮助我们更好地了解内核源代码树,并在以后对其进行深入分析。概述图 1 是我们在 20,000 阅读全文
posted @ 2011-04-19 18:21 hnrainll 阅读(271) 评论(0) 推荐(0) 编辑
摘要: vivi_Makefile分析笔记:#定义vivi版本信息,vivi版本号为0.1.4VERSION = 0PATCHLEVEL = 1SUBLEVEL = 4VIVIRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)#定义目标平台体系结构,目标平台体系结构是ARM.#"="和":="都是给变量赋值,使用":="的作用是立即把定义中参考到的函数和变量都展开.如果使用"=",函数#和变量参考会留在那里,就是说改变一个变量的值会导致其他变量的值也被改变.见教材P32.ARCH := 阅读全文
posted @ 2011-04-14 08:02 hnrainll 阅读(486) 评论(0) 推荐(0) 编辑
摘要: sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。函数原型:int scanf( const char *format [,argument]... );其中的format可以是一个或多个:{%[*] [width] [{h|l|I64|L}] type|'_'|'\t'|'\n'|非%符号},注:{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。² width:宽度,一般可以忽略,用法如:const char sourceStr[] = "hel 阅读全文
posted @ 2011-04-13 19:06 hnrainll 阅读(1152) 评论(0) 推荐(0) 编辑
摘要: http://www.ibm.com/developerworks/cn/IBM developworks有很多很经典的资料 阅读全文
posted @ 2011-04-13 17:22 hnrainll 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 程序1(test1.l):%{#include <stdio.h>%}%% begin printf("Started\n");hello printf("Hello yourself!\n");thanks printf("Your welcome\n");end printf("Stopped\n");%%在linux中:第一步:flex test1.l第二步:gcc -o test1 lex.yy.c -lfl第三步:运行./test1 输入begin 程序将在屏幕上打印Started.程序2:( 阅读全文
posted @ 2011-04-12 21:58 hnrainll 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 源地址: http://www.ibm.com/developerworks/cn/linux/sdk/lex/index.htmlLex 代表 Lexical Analyzar。Yacc 代表 Yet Another Compiler Compiler。 让我们从 Lex 开始吧。LexLex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。这些词汇模式(或者常规表达式)在一种特殊的句子结构中定义,这个我们一会儿就要讨论。一种匹配的常规表达式可能会包含相关的动作。这一动作可能还包括返回一个标记。当 Lex 接收到文件或文本形式的输入时,它试图将文本与常规表达式进行匹配。它一次 阅读全文
posted @ 2011-04-12 21:08 hnrainll 阅读(495) 评论(0) 推荐(0) 编辑
上一页 1 ··· 58 59 60 61 62 63 64 65 66 ··· 71 下一页