摘要:from http://code.google.com/p/google-styleguide/版本:3.133原作者:Benjy WeinbergerCraig SilversteinGregory EitzmannMark MentovaiTashana Landray翻译:YuleFoxyospaly项目主页:Google Style GuideGoogle 开源项目风格指南 - 中文版PS: 可以对比 Linus的 《Linux内核代码风格》http://blog.csdn.net/shendl/article/details/6230836的C风格指南阅读,看...
阅读全文
随笔分类 - C/C++编程
摘要:by沈东良/良少http://blog.csdn.net/shendl C99标准定义了一个新的关键字_Bool,提供了布尔类型。以前,C程序员总是使用自己的方法定义布尔类型。 0表示false,非0表示true。 可能使用char类型表示一个布尔类型,也可能使用int类型表示一个布尔类型。 很多函数库都定义了自己的布尔类型和相应的宏,枚举,typedef。 现在C99把C语言原生的布尔类型带来了。#include<stdbool.h>这个头文件定义了bool,true,false...
阅读全文
摘要:by沈东良/良少http://blog.csdn.net/shendl2011.07.19系统初始化时kernel_init在内核态创建和运行应用程序以完成系统初始化 内核刚刚启动时,只有内核态的代码,后来在init过程中,在内核态运行了一些初始化系统的程序,才产生了工作在用户空间的进程。/* This is a non __init function. Force it to be noinline otherwise gcc736 * makes it inline ...
阅读全文
摘要:By沈东良(良少)http://blog.csdn.net/shendl Linux内核的实现,大量使用了数据结构,包括了数组、链表和散列表。其中用的最多的是双向循环链表。Linux内核使用的是自己定义的链表和散列表,简单而高效,使用方法也非常的别具一格。 研究Linux内核的链表和散列表对于看懂Linux内核源代码有重要的意义。本文基于kernel2.6.39版本进行分析。Linux的链表和散列表定义在include...
阅读全文
摘要:p { margin-bottom: 0.21cm; }h1 { margin-bottom: 0.21cm; }h1.western { font-family: "DejaVu Sans Condensed",sans-serif; font-size: 16pt; }h1.cjk { font-family: "DejaVu Sans Condensed"; font-size: 16pt; font-style: normal; font-weight: bold; }h1.ctl { font-family: "Lohit Hindi
阅读全文
摘要:<!--@page { margin: 2cm }PRE.cjk { font-family: "DejaVu Sans", monospace }P { margin-bottom: 0.21cm }A:link { so-language: zxx }--> 内核的链表list_head设计相当巧妙。今天我说一下对list_head链表的遍历时如何删除元素。 链表遍历时,如果删除当前元素,一般都是会出错的。在所有语言的各种库中的链表都是如此。list_head也一样。<!--@page { margin: 2cm }P { margin-bottom:
阅读全文
摘要:对分布式系统中的进程标识”一文的疑问 刚才看到陈硕先生的一篇blog:“分布式系统中的进程标识”,地址:http://www.cnblogs.com/Solstice/archive/2011/03/29/1998412.html 我不同意该文的观点,因此在这里抛砖引玉,提出一个构建一个分布式系统的简单方案。 文中说:“正确做法:以四元组ip:port:start_time:pid作为分布式系统中进程的gpid,其中start_time是64-bit整数,表示进程的启动时刻。” 第一个问题:没有port的进程怎么命名? 文中这样回答:“根...
阅读全文
摘要:<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> Linux内核代码风格 By LinusTorvalds <!-- @page { margin: 2cm } H1 { margin-top: 0.6cm; margin-b...
阅读全文
摘要:Unix编程哲学: 1,模块原则:使用简洁的接口拼合简单的部件。2,清晰原则:清晰胜于机巧。3,组合原则:设计时考虑拼接组合。4,分离原则:策略同机制分离,接口同实现引擎分离。5,简洁原则:设计要简洁,复杂度能低则低。6,吝啬原则:除非确无它法,不要编写庞大的程序。7,透明性原则:设计要可见,以便审查和调试。8,健壮原则:健壮源于透明与简洁。9,表示原则:把知识叠入数据以求逻辑质朴而健壮。10,通俗原则:接口设计避免标新立异。11,缄默原则:如果一个程序没什么好说的,就沉默。12,补救原则:出现异常时,马上退出并给出足够的错误信息。13,经济原则:宁花机器一分,不花程序员一秒。14,生成原..
阅读全文
摘要:1,Visual Studio中报这个错误:Project : error PRJ0002 : Error result 31 returned from 'C:/Program Files/Microsoft SDKs/Windows/v6.0A/bin/mt.exe'.如下方法解决:Properties -> Configuration Properties -> Linker -> Manifest File, set Generate Manifest to No.2,Visual Studio编译成功,运行时报这个错误:没有找到MSVCR90.dll
阅读全文
摘要:Ruby, Io, PHP, Python, Lua, Java, Perl, Applescript, TCL, ELisp, Javascript, OCaml, Ghostscript, and C Fractal BenchmarkI've always enjoyed fractals, and was curious if scripting languages were up to the task. I wrote a very simple Mandelbrot set generator for my test. Rather than optimizing for
阅读全文
摘要:刚看到一篇文章,http://news.csdn.net/a/20100719/219154.html 说面试的一道题目是:把N个元素插入到一个Vector里(或者ArrayList,或其它的你所选择的语言里被称作动态数组的东西)。 我的想法是,创建一个新的单向链表,这个链表插入新数据是在头部,而不是尾部。这样就可以了。 如Struct List{ struct List * next; void * data; }; Struct List *head=(struct List *)malloc(sizeof(struct List)); head...
阅读全文
摘要:1,编写一个最简单的驱动程序源文件main.c:#include<linux/init.h>#include<linux/module.h>MODULE_AUTHOR("EdwardShen");MODULE_LICENSE("MPLBSD/GPL");staticinthello_init(void){printk(KERN_ALERT"hello world/n");return0;}staticvoidhello_exit(void){printk(KERN_ALERT"Goodbye,Worl
阅读全文
摘要:深入浅出JNA—快速调用原生函数 本文原名《使用JNA方便地调用原生函数》发表于2009年3月的“程序员”杂志上。感谢程序员杂志的许可,使这篇文章能够成为免费的电子版,发布于网络上。 程序员杂志发表此文时,略有裁剪,因此本文比程序员上的文章内容更多。 JNA的API参考手册和最新版本的pdf文档,可以在如下地址下载:http://code.google.com/p/shendl/downloads/list PDF格式文档可在http://download.csdn.net/source/1503487免费下载。和...
阅读全文
摘要:贴上JNA—JNI终结者、深入解析JNA—模拟C语言结构体两篇文章的完整源代码C语言源代码:头文件#define MYLIBAPIextern"C"__declspec(dllexport )MYLIBAPIvoid say(wchar_t* pValue);struct UserStruct{long id;wchar_t*name;int age;};MYLIBAPIvoid sayUser(UserStruct* pUserStruct);struct CompanyStruct{long id;wchar_t*name;//UserStruct* users[100
阅读全文